ฉันกำลังพยายามคิดบางอย่างด้วยภาษา Apple Swift ใหม่ สมมติว่าฉันเคยทำสิ่งต่อไปนี้ใน Objective-C ฉันมีreadonly
คุณสมบัติและไม่สามารถเปลี่ยนแปลงได้ทีละรายการ อย่างไรก็ตามเมื่อใช้วิธีการเฉพาะคุณสมบัติจะเปลี่ยนไปในทางตรรกะ
ฉันใช้ตัวอย่างต่อไปนี้นาฬิกาที่เรียบง่ายมาก ฉันจะเขียนสิ่งนี้ใน 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
เพื่อวัตถุประสงค์เฉพาะเราไม่สามารถสัมผัสวินาทีนาทีและชั่วโมงได้โดยตรงและอนุญาตให้เพิ่มขึ้นทีละวินาทีโดยใช้วิธีการ มีเพียงวิธีนี้เท่านั้นที่สามารถเปลี่ยนค่าได้โดยใช้เคล็ดลับของตัวแปรอินสแตนซ์
เนื่องจากไม่มีสิ่งเหล่านี้ใน Swift ฉันจึงพยายามหาสิ่งที่เทียบเท่า ถ้าฉันทำสิ่งนี้:
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++
}
}
}
}
วิธีนี้ใช้ได้ผล แต่ใคร ๆ ก็เปลี่ยนคุณสมบัติได้โดยตรง
บางทีฉันอาจมีการออกแบบที่ไม่ดีใน Objective-C และนั่นเป็นเหตุผลว่าทำไม Swift ใหม่ที่มีศักยภาพเทียบเท่าจึงไม่สมเหตุสมผล ถ้าไม่มีและมีคนตอบฉันจะขอบคุณมาก;)
บางทีกลไกการควบคุมการเข้าถึงในอนาคตที่Apple สัญญาไว้คือคำตอบ?
ขอบคุณ!