Я намагаюся щось зрозуміти з новою мовою Apple Swift. Скажімо, я раніше робив щось подібне в Objective-C. У мене є readonly
властивості, і їх неможливо змінити індивідуально. Однак, використовуючи певний метод, властивості змінюються логічно.
Я беру наступний приклад, дуже простий годинник. Я б написав це в Objective-C.
@interface Clock : NSObject
@property (readonly) NSUInteger hours;
@property (readonly) NSUInteger minutes;
@property (readonly) NSUInteger seconds;
- (void)incrementSeconds;
@end
@implementation Clock
- (void)incrementSeconds {
_seconds++;
if (_seconds == 60) {
_seconds = 0;
_minutes++;
if (_minutes == 60) {
_minutes = 0;
_hours++;
}
}
}
@end
Для певної мети ми не можемо торкатися секунд, хвилин і годин безпосередньо, і збільшується лише секунди за секундою за допомогою методу. Тільки цей метод міг змінити значення, використовуючи трюк змінних екземпляра.
Оскільки у Свіфта таких речей немає, я намагаюся знайти еквівалент. Якщо я це роблю:
class Clock : NSObject {
var hours: UInt = 0
var minutes: UInt = 0
var seconds: UInt = 0
func incrementSeconds() {
self.seconds++
if self.seconds == 60 {
self.seconds = 0
self.minutes++
if self.minutes == 60 {
self.minutes = 0
self.hours++
}
}
}
}
Це спрацювало б, але будь-хто міг безпосередньо змінити властивості.
Можливо, у мене вже був поганий дизайн в Objective-C, і тому потенційний новий еквівалент Swift не має сенсу. Якщо ні, і якщо у когось є відповідь, я був би дуже вдячний;)
Можливо, майбутні механізми контролю доступу, обіцяні Apple, є відповіддю?
Дякую!