Estou tentando descobrir algo com a nova linguagem Apple Swift. Digamos que eu costumava fazer algo como o seguinte no Objective-C. Eu tenho readonly
propriedades e elas não podem ser alteradas individualmente. No entanto, usando um método específico, as propriedades são alteradas de maneira lógica.
Tomo o exemplo a seguir, um relógio muito simples. Eu escreveria isso em 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 uma finalidade específica, não podemos tocar diretamente os segundos, minutos e horas, e só é permitido incrementar segundo a segundo usando um método. Somente esse método pode alterar os valores usando o truque das variáveis de instância.
Como não existem essas coisas no Swift, estou tentando encontrar um equivalente. Se eu fizer isso:
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++
}
}
}
}
Isso funcionaria, mas qualquer um poderia alterar diretamente as propriedades.
Talvez eu já tenha um design ruim no Objective-C e é por isso que o potencial novo equivalente do Swift não faz sentido. Se não e se alguém tiver uma resposta, ficaria muito grato;)
Talvez o futuro mecanismo de controle de acesso prometido pela Apple seja a resposta?
Obrigado!