新しい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の同等物が意味をなさないのです。そうでなければ、誰かが答えを持っているなら、私はとても感謝しています;)
たぶん、アップルが約束する将来のアクセス制御メカニズムがその答えでしょうか?
ありがとう!