Ich versuche mit der neuen Apple Swift-Sprache etwas herauszufinden. Nehmen wir an, ich habe in Objective-C so etwas wie das Folgende gemacht. Ich habe readonly
Eigenschaften und sie können nicht individuell geändert werden. Mit einer bestimmten Methode werden die Eigenschaften jedoch auf logische Weise geändert.
Ich nehme das folgende Beispiel, eine sehr einfache Uhr. Ich würde dies in Objective-C schreiben.
@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
Für einen bestimmten Zweck können wir die Sekunden, Minuten und Stunden nicht direkt berühren, und es ist nur zulässig, Sekunden für Sekunden mithilfe einer Methode zu erhöhen. Nur diese Methode kann die Werte mithilfe des Tricks der Instanzvariablen ändern.
Da es in Swift keine solchen Dinge gibt, versuche ich, ein Äquivalent zu finden. Wenn ich das mache:
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++
}
}
}
}
Das würde funktionieren, aber jeder könnte die Eigenschaften direkt ändern.
Vielleicht hatte ich bereits ein schlechtes Design in Objective-C und deshalb macht das potenzielle neue Swift-Äquivalent keinen Sinn. Wenn nicht und wenn jemand eine Antwort hat, wäre ich sehr dankbar;)
Vielleicht sind die von Apple versprochenen zukünftigen Zugriffskontrollmechanismen die Antwort?
Vielen Dank!