Yeni Apple Swift diliyle bir şeyler çözmeye çalışıyorum. Diyelim ki Objective-C'de aşağıdaki gibi bir şey yapıyordum. readonly
Mülklerim var ve tek tek değiştirilemezler. Ancak, belirli bir yöntem kullanılarak, özellikler mantıksal bir şekilde değiştirilir.
Şu örneği alıyorum, çok basit bir saat. Bunu Objective-C'de yazardım.
@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
Belirli bir amaç için, saniyelere, dakikalara ve saatlere doğrudan dokunamayız ve bir yöntem kullanarak yalnızca saniye saniye artmasına izin verilir. Yalnızca bu yöntem, örnek değişkenlerin hilesini kullanarak değerleri değiştirebilir.
Swift'de böyle bir şey olmadığı için, bir eşdeğer bulmaya çalışıyorum. Bunu yaparsam:
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++
}
}
}
}
Bu işe yarar, ancak herhangi biri doğrudan özellikleri değiştirebilir.
Belki zaten Objective-C'de kötü bir tasarımım vardı ve bu yüzden potansiyel yeni Swift eşdeğeri mantıklı değil. Olmazsa ve birinin cevabı olursa çok minnettar olurum;)
Belki cevap, Apple'ın vaat ettiği gelecekteki Erişim Kontrol Mekanizmalarıdır ?
Teşekkürler!