Próbuję coś wymyślić w nowym języku Apple Swift. Powiedzmy, że robiłem coś podobnego do tego w Objective-C. mamreadonly
właściwości i nie można ich zmieniać indywidualnie. Jednak przy użyciu określonej metody właściwości są zmieniane w logiczny sposób.
Biorę następujący przykład, bardzo prosty zegar. Napisałbym to w 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
W określonym celu nie możemy bezpośrednio dotykać sekund, minut i godzin, a przy użyciu metody można tylko zwiększać sekundę po sekundzie. Tylko ta metoda może zmieniać wartości przy użyciu sztuczek zmiennych instancji.
Ponieważ w Swift nie ma takich rzeczy, próbuję znaleźć odpowiednik. Jeśli to zrobię:
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++
}
}
}
}
To by zadziałało, ale każdy mógłby bezpośrednio zmienić właściwości.
Może miałem już zły projekt w Objective-C i dlatego potencjalny nowy odpowiednik Swift nie ma sensu. Jeśli nie i jeśli ktoś ma odpowiedź, byłbym bardzo wdzięczny;)
Może obiecane przez Apple przyszłe mechanizmy kontroli dostępu są odpowiedzią?
Dzięki!