J'essaie de comprendre quelque chose avec le nouveau langage Apple Swift. Disons que j'avais l'habitude de faire quelque chose comme ce qui suit en Objective-C. j'aireadonly
propriétés et elles ne peuvent pas être modifiées individuellement. Cependant, en utilisant une méthode spécifique, les propriétés sont modifiées de manière logique.
Je prends l'exemple suivant, une horloge très simple. J'écrirais ceci en 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
Dans un but précis, nous ne pouvons pas toucher directement les secondes, les minutes et les heures, et il est seulement autorisé à incrémenter seconde par seconde à l'aide d'une méthode. Seule cette méthode pouvait changer les valeurs en utilisant l'astuce des variables d'instance.
Puisqu'il n'y a pas de telles choses dans Swift, j'essaie de trouver un équivalent. Si je fais ceci:
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++
}
}
}
}
Cela fonctionnerait, mais n'importe qui pourrait changer directement les propriétés.
Peut-être que j'avais déjà une mauvaise conception en Objective-C et c'est pourquoi le nouvel équivalent potentiel de Swift n'a pas de sens. Sinon et si quelqu'un a une réponse, je serais très reconnaissant;)
Peut-être que les futurs mécanismes de contrôle d'accès promis par Apple sont la réponse?
Merci!