我正在尝试使用新的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替代物没有意义的原因。如果没有,如果有人回答,我将不胜感激;)
也许苹果承诺的未来访问控制机制就是答案?
谢谢!