我正在尝试用新的 Apple Swift 语言解决一些问题。假设我曾经在 Objective-C 中做过类似于下面这样的事情。我有 readonly
属性,它们不能单独更改。但是,使用特定的方法,可以按照逻辑方式更改属性。
我以下面这个例子为例,一个非常简单的时钟。
@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 等价物是没有意义的。如果没有,如果有人有答案,我将非常感激;)
也许苹果承诺的未来 访问控制机制就是答案?
谢谢!