Tôi đang cố gắng tìm ra thứ gì đó với ngôn ngữ Apple Swift mới. Giả sử tôi đã từng làm một cái gì đó như sau trong Objective-C. Tôi có readonly
tài sản, và chúng không thể được thay đổi cá nhân. Tuy nhiên, bằng cách sử dụng một phương thức cụ thể, các thuộc tính được thay đổi một cách hợp lý.
Tôi lấy ví dụ sau đây, một chiếc đồng hồ rất đơn giản. Tôi sẽ viết điều này trong Mục tiêu-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
Đối với một mục đích cụ thể, chúng ta không thể chạm trực tiếp vào giây, phút và giờ và chỉ được phép tăng từng giây bằng một phương pháp. Chỉ có phương pháp này có thể thay đổi các giá trị bằng cách sử dụng thủ thuật của các biến thể hiện.
Vì không có những thứ như vậy trong Swift, tôi đang cố gắng tìm một thứ tương đương. Nếu tôi làm điều này:
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++
}
}
}
}
Điều đó sẽ làm việc, nhưng bất cứ ai cũng có thể thay đổi trực tiếp các thuộc tính.
Có lẽ tôi đã có một thiết kế tồi trong Objective-C và đó là lý do tại sao tương đương Swift mới tiềm năng không có ý nghĩa. Nếu không và nếu ai đó có câu trả lời, tôi sẽ rất biết ơn;)
Có lẽ các cơ chế kiểm soát truy cập trong tương lai được Apple hứa hẹn là câu trả lời?
Cảm ơn!