Saya mencoba mencari tahu sesuatu dengan bahasa Apple Swift yang baru. Katakanlah saya dulu melakukan sesuatu seperti yang berikut di Objective-C. Saya memiliki readonly
properti, dan mereka tidak dapat diubah secara individual. Namun, menggunakan metode tertentu, properti diubah secara logis.
Saya ambil contoh berikut, jam yang sangat sederhana. Saya akan menulis ini di 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
Untuk tujuan tertentu, kami tidak dapat menyentuh detik, menit dan jam secara langsung, dan itu hanya diperbolehkan untuk meningkatkan detik demi detik menggunakan metode. Hanya metode ini yang dapat mengubah nilai dengan menggunakan trik variabel instan.
Karena tidak ada hal seperti itu di Swift, saya mencoba mencari yang setara. Jika saya melakukan ini:
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++
}
}
}
}
Itu akan berhasil, tetapi siapa pun dapat mengubah properti secara langsung.
Mungkin saya sudah memiliki desain yang buruk di Objective-C dan itulah mengapa potensi Swift baru yang setara tidak masuk akal. Jika tidak dan jika seseorang memiliki jawaban, saya akan sangat berterima kasih;)
Mungkin Mekanisme Akses Kontrol di masa depan yang dijanjikan oleh Apple adalah jawabannya?
Terima kasih!