Estoy tratando de descubrir algo con el nuevo lenguaje Apple Swift. Digamos que solía hacer algo como lo siguiente en Objective-C. Tengo readonly
propiedades y no se pueden cambiar individualmente. Sin embargo, utilizando un método específico, las propiedades se cambian de forma lógica.
Tomo el siguiente ejemplo, un reloj muy simple. Escribiría esto 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
Para un propósito específico, no podemos tocar los segundos, minutos y horas directamente, y solo se permite incrementar segundo por segundo usando un método. Solo este método podría cambiar los valores utilizando el truco de las variables de instancia.
Como no hay tales cosas en Swift, estoy tratando de encontrar un equivalente. Si hago esto:
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++
}
}
}
}
Eso funcionaría, pero cualquiera podría cambiar directamente las propiedades.
Tal vez ya tenía un mal diseño en Objective-C y es por eso que el potencial nuevo equivalente de Swift no tiene sentido. Si no es así y si alguien tiene una respuesta, estaría muy agradecido;)
¿Quizás los futuros mecanismos de control de acceso prometidos por Apple son la respuesta?
¡Gracias!