คำถาม
เอกสารของ Appleระบุว่า:
ผู้สังเกตการณ์ willSet และ didSet จะไม่ถูกเรียกเมื่อคุณสมบัติถูกเริ่มต้นครั้งแรก พวกเขาจะถูกเรียกเฉพาะเมื่อค่าของคุณสมบัติการตั้งค่านอกบริบทการเริ่มต้น
เป็นไปได้ไหมที่จะบังคับให้เรียกสิ่งเหล่านี้ในระหว่างการเริ่มต้น?
ทำไม?
สมมติว่าฉันมีชั้นนี้
class SomeClass {
var someProperty: AnyObject {
didSet {
doStuff()
}
}
init(someProperty: AnyObject) {
self.someProperty = someProperty
doStuff()
}
func doStuff() {
// do stuff now that someProperty is set
}
}
ฉันสร้างวิธีการdoStuff
เพื่อให้การประมวลผลมีความกระชับมากขึ้น แต่ฉันต้องการเพียงแค่ประมวลผลคุณสมบัติภายในdidSet
ฟังก์ชัน มีวิธีบังคับให้สิ่งนี้เรียกในระหว่างการเริ่มต้นหรือไม่?
ปรับปรุง
ฉันตัดสินใจที่จะลบเครื่องมืออำนวยความสะดวกสำหรับชั้นเรียนของฉันและบังคับให้คุณตั้งค่าคุณสมบัติหลังจากเริ่มต้น สิ่งนี้ทำให้ฉันรู้ว่าdidSet
จะถูกเรียกเสมอ ฉันไม่ได้ตัดสินใจว่าภาพรวมจะดีกว่านี้หรือไม่ แต่มันก็เหมาะกับสถานการณ์ของฉัน
defer
:convenience init(someProperty: AnyObject) { self.init() defer { self.someProperty = someProperty }