आपकी प्रारंभिक समस्या थी:
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }
}
इंस्टेंस सदस्य 'श्रेणियांप्रेजेज' का उपयोग 'ReportView' प्रकार पर नहीं किया जा सकता है
पिछली पोस्टें सही ढंग से इंगित करती हैं, यदि आप एक गणना की गई संपत्ति चाहते हैं , तो =
संकेत गलत है।
त्रुटि के लिए अतिरिक्त संभावना:
यदि आपका इरादा "किसी बंद या फ़ंक्शन के साथ डिफ़ॉल्ट संपत्ति मान सेट करना" था , तो आपको इसे केवल थोड़ा बदलने की आवश्यकता है। (नोट: यह उदाहरण स्पष्ट रूप से ऐसा करने का इरादा नहीं था)
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
var numPages: Int = { return categoriesPerPage.count }()
}
हटाने के बजाय =
, हम ()
एक डिफ़ॉल्ट इनिशियलाइज़ेशन क्लोजर को निरूपित करने के लिए जोड़ते हैं । (यूआई कोड को इनिशियलाइज़ करते समय यह उपयोगी हो सकता है, यह सब एक जगह पर रखने के लिए।)
हालाँकि, ठीक वही त्रुटि होती है:
इंस्टेंस सदस्य 'श्रेणियांप्रेजेज' का उपयोग 'ReportView' प्रकार पर नहीं किया जा सकता है
समस्या एक संपत्ति को दूसरे के मूल्य के साथ शुरू करने की कोशिश कर रही है। एक उपाय है इनिशियलाइज़र बनाना lazy
। यह तब तक निष्पादित नहीं किया जाएगा जब तक कि मूल्य तक पहुँचा नहीं जाता है।
class ReportView: NSView {
var categoriesPerPage = [[Int]]()
lazy var numPages: Int = { return categoriesPerPage.count }()
}
अब कंपाइलर खुश है!
numPages
एक बंद होने के बजाय एक समान संपत्ति घोषित करने जा रहे हैं , तो समान चिह्न हटा दें:var numPages: Int { return categoriesPerPage.count }