ปัญหาเริ่มต้นของคุณคือ:
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }
}
ไม่สามารถใช้สมาชิกอินสแตนซ์ 'categoryPerPage' กับประเภท 'ReportView'
บทความก่อนหน้านี้ได้อย่างถูกต้องชี้ให้เห็นถ้าคุณต้องการคุณสมบัติการคำนวณที่=
ป้ายเป็นหลง
ความเป็นไปได้เพิ่มเติมสำหรับข้อผิดพลาด:
หากเจตนาของคุณคือ"การตั้งค่าคุณสมบัติเริ่มต้นด้วยการปิดหรือฟังก์ชั่น"คุณจะต้องเปลี่ยนแปลงเพียงเล็กน้อยเช่นกัน (หมายเหตุ: เห็นได้ชัดว่าตัวอย่างนี้ไม่ได้ตั้งใจทำเช่นนั้น)
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }()
}
แทนที่จะลบ=
เราเพิ่ม()
เพื่อแสดงถึงการปิดการเริ่มต้นเริ่มต้น (สิ่งนี้จะมีประโยชน์เมื่อเริ่มต้นโค้ด UI เพื่อเก็บไว้ในที่เดียว)
อย่างไรก็ตามข้อผิดพลาดเดียวกันเกิดขึ้น:
ไม่สามารถใช้สมาชิกอินสแตนซ์ 'categoryPerPage' กับประเภท 'ReportView'
ปัญหากำลังพยายามเริ่มต้นคุณสมบัติหนึ่งด้วยค่าของอีกคุณสมบัติหนึ่ง lazy
ทางออกหนึ่งที่จะทำให้การเริ่มต้น จะไม่ถูกดำเนินการจนกว่าจะเข้าถึงค่า
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
lazy var numPages: Int = { return categoriesPerPage.count }()
}
ตอนนี้คอมไพเลอร์มีความสุข!
numPages
แทนที่จะเป็นการปิดลบเครื่องหมายเท่ากับ:var numPages: Int { return categoriesPerPage.count }