Я пытаюсь понять что-то с новым языком 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
Для определенной цели мы не можем касаться секунд, минут и часов напрямую, и только с помощью метода можно увеличивать секунду за секундой. Только этот метод может изменить значения, используя трюк переменных экземпляра.
Поскольку в Swift таких вещей нет, я пытаюсь найти эквивалент. Если я это сделаю:
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, является ответом?
Спасибо!