ในภาษา Swift เพื่อเริ่มต้นอินสแตนซ์หนึ่งต้องกรอกข้อมูลในฟิลด์ทั้งหมดของคลาสนั้นและจากนั้นเรียก superconstructor เท่านั้น:
class Base {
var name: String
init(name: String) {
self.name = name
}
}
class Derived: Base {
var number: Int
init(name: String, number: Int) {
// won't compile if interchange lines
self.number = number
super.init(name)
}
}
สำหรับฉันดูเหมือนว่าย้อนหลังเนื่องจากต้องself
สร้างอินสแตนซ์ก่อนที่จะกำหนดค่าให้กับเขตข้อมูลและรหัสนั้นให้ความประทับใจราวกับว่าการผูกมัดเกิดขึ้นหลังจากการมอบหมายเท่านั้น นอกจากนั้นซูเปอร์คลาสยังไม่มีวิธีทางกฎหมายในการอ่านคุณสมบัติที่แนะนำของคลาสย่อยดังนั้นความปลอดภัยจะไม่นับในกรณีนี้
นอกจากนี้ภาษาอื่น ๆ อีกมากมายเช่น JavaScript และแม้แต่ Objective C ซึ่งเป็นบรรพบุรุษทางจิตวิญญาณของ Swift นั้นจำเป็นต้องมีการรับสายเรียกเข้าก่อนที่จะเข้าถึงself
ไม่ใช่หลังจากนั้น
อะไรคือเหตุผลที่อยู่เบื้องหลังตัวเลือกนี้เพื่อกำหนดเขตข้อมูลที่จะกำหนดก่อนที่จะเรียก superconstructor?
self
การเข้าถึง