के माध्यम से गुणों को initit नहीं कर सकता है मैं उत्सुक हूं कि आपके init विधि के अंदर एक विधि को कॉल करने के लिए वैसे भी है जो कक्षा के इंस्टेंस गुण सेट करता है । अनिवार्य रूप से मेरे पास सिर्फ एक वर्ग है जो उप-वर्ग UIView, init में कुछ सबव्यूव जोड़ता है, और उनमें से कुछ सबव्यूज़ कक्षा के उदाहरण चर हैं।'super.init से पहले विधि कॉल में स्वयं का उपयोग स्वयं शुरू होता है', एक विधि कॉल
class MyView: UIView {
var collectionView: UICollectionView
convenience init() {
self.init(frame:CGRectZero)
}
override init (frame : CGRect) {
super.init(frame : frame)
addSubviews()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
addSubviews()
}
func addSubviews(){
self.collectionView = UICollectionView()
}
}
अब समस्या आता है कि मैं अपने कक्षाएं आरंभ करने से पहले सुपर init फोन नहीं कर सकते हैं आंतरिक गुण (संपत्ति 'self.collectionView' super.init कॉल पर inialized नहीं), लेकिन मैं यह भी अपने कस्टम कॉल नहीं कर सकते super.init से पहले उन चर को प्रारंभ करने के लिए विधि, क्योंकि यह उस प्रारंभिक से पहले स्वयं का उपयोग नहीं कर सकता है। मुझे एहसास है कि मैं इंस्टेंस वैरिएबल वैकल्पिक बना सकता हूं, लेकिन यह कम सुरुचिपूर्ण लगता है, क्योंकि मुझे पता है कि यह हमेशा शुरू किया जाएगा (और कई और हैं, यह सिर्फ एक सरलीकृत संस्करण है)। क्या मेरे सभी इंस्टेंस वैरिएबल विकल्प बनाने के बिना इसे पूरा करने का कोई तरीका है?
संपादित करें:
मुझे लगता है कि अंत में मेरे सवाल है क्यों तेज पूर्व super.init बुला के लिए एक विधि बुला असंतुष्ट अनुमति देता है?
override init (frame : CGRect) {
addSubviews()
super.init(frame : frame)
}
final func addSubviews(){
self.collectionView = UICollectionView()
}
और
override init (frame : CGRect) {
self.collectionView = UICollectionView()
super.init(frame : frame)
}
में प्रारंभ नहीं किया गया है, क्योंकि आप जानते हैं कि वे हमेशा प्रारंभ किए जाएंगे, आप गुणों को पूरी तरह से अनचाहे विकल्प बना सकते हैं। – Moritz
@EricD। इस तरह यह वर्तमान में कर रहा था, लेकिन मुझे यह सुनिश्चित करने के लिए संकलन समय की जांच पसंद है कि हम वास्तव में उन्हें सभी –
गुणों को डिफ़ॉल्ट मान देते हैं – user3441734