Sto cercando di capire qualcosa con il nuovo linguaggio Apple Swift. Diciamo che in Objective-C facevo qualcosa di simile al seguente. Ho delle readonly
proprietà e non possono essere modificate individualmente. Tuttavia, utilizzando un metodo specifico, le proprietà vengono modificate in modo logico.
Prendo il seguente esempio, un orologio molto semplice. Lo scriverei in 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
Per uno scopo specifico, non possiamo toccare direttamente i secondi, i minuti e le ore ed è consentito incrementare solo secondo per secondo usando un metodo. Solo questo metodo potrebbe cambiare i valori usando il trucco delle variabili di istanza.
Dato che non ci sono cose del genere in Swift, sto cercando di trovare un equivalente. Se lo faccio:
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++
}
}
}
}
Funzionerebbe, ma chiunque potrebbe cambiare direttamente le proprietà.
Forse avevo già un cattivo design in Objective-C ed è per questo che il potenziale nuovo equivalente di Swift non ha senso. In caso contrario e se qualcuno ha una risposta, sarei molto grato;)
Forse i futuri meccanismi di controllo degli accessi promessi da Apple sono la risposta?
Grazie!