2014-09-16 7 views
9

स्विफ्ट (1.0) विरासत में UIView प्रारंभकर्ता को ओवरराइड करने के लिए मुझे विश्वास से परे नट चला रहा है। मुझे विश्वास है कि इस तरह के बारे में कुछ पूछना है लेकिन मैं इसे समझ नहीं सकता। मेरे पास मेरा कस्टम व्यू है जिसे मैं प्रोग्राम (1: फ्रेम: सीजीईजीईटी) के साथ प्रोग्रामेटिक रूप से बनाने में सक्षम होना चाहता हूं और साथ ही इसे स्टोरी बोर्ड से लोड कर सकता हूं, जिसमें केसिट (कोडर एडेडर: एनएससीओडर) प्रारंभिकरण के लिए इस्तेमाल किया जाना चाहिए। दोनों मामलों में मैं अपनी कस्टम सेटअप विधि को कॉल करना चाहता हूं। इसलिए जैसा:स्विफ्ट 1.0

import UIKit 

class CustomView: UIView { 

    override convenience init(frame: CGRect) { 
     super.init(frame: frame) 
     self.myCustomSetup() 
    } 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     self.myCustomSetup() 
    } 

    func myCustomSetup() { 
     self.backgroundColor = UIColor.redColor() 
    } 
} 

इस काम करने के लिए नहीं लगता है, तेज प्रलेखन से मैं समझता हूँ वहाँ केवल वर्ग जो सभी सुविधा initializers फोन के लिए एक नामित प्रारंभकर्ता होना चाहिए। UIView मामले में यह init (कोडर aDecoder: एनएससीओडर) होना चाहिए। हालांकि मैं aDecoder: NSCoderinit(frame: CGRect) में नहीं बना सकता हूं और न ही मैं इसे वैकल्पिक रूप से शून्य के रूप में पास कर सकता हूं। मुझे क्या करना चाहिए ? मैं उन्हें दोनों कैसे ओवरराइड कर सकता हूं?

+1

'initWithFrame:' ​​एक नामित प्रारंभकर्ता भी है। –

+0

हाँ जो काम करता है, धन्यवाद। सुविधा कीवर्ड को एक्सकोड द्वारा सुझाया गया था :-(ठीक है जो मुझे समझ में नहीं आता है। दस्तावेज़ीकरण से केवल प्रति वर्ग एक नामित प्रारंभिक होना चाहिए। अन्य सभी प्रारंभिकताओं को उसे कॉल करना चाहिए। मैं अपनी कक्षा (और UIView) कैसे शुरू कर सकता हूं दो अलग-अलग लोगों के साथ। अलग-अलग अर्थ में कोई अन्य नामित व्यक्ति को फोन नहीं करता है? मुझे क्या गलत हो रहा है? – stringCode

+1

क्या आप इसके बारे में निश्चित हैं? मेरे लिए सही नहीं लगता है। शायद, दिशानिर्देश के रूप में, आपको एक ऐसा करने का प्रयास करना चाहिए जितना संभव हो सके छोटे नामित प्रारंभकर्ता, लेकिन इसे किसी को सीमित करने का कोई मतलब नहीं है। 'initWithFrame:' और 'initWithCoder:' जितना अलग हो सकता है। –

उत्तर

6

एक कक्षा में कम से कम एक नामित प्रारंभकर्ता होना चाहिए। इसमें एक से अधिक हो सकते हैं।

आपको अपने कोड का काम करने के लिए केवल convenienceinit(frame: CGRect) से हटा देना है।

+0

हाँ जो काम करता है , धन्यवाद। सुविधा कीवर्ड को एक्सकोड द्वारा सुझाया गया था :-(ठीक है जो मुझे समझ में नहीं आता है। दस्तावेज़ीकरण से प्रति वर्ग केवल एक नामित प्रारंभिक होना चाहिए। अन्य सभी प्रारंभिकताओं को उसको कॉल करना चाहिए। ई मैं अपनी कक्षा (और UIView) दो अलग-अलग लोगों के साथ शुरू कर सकता हूं। अलग-अलग अर्थ में कोई अन्य नामित व्यक्ति को फोन नहीं करता है? मुझे क्या गलत हो रहा है? – stringCode

+2

एक कक्षा में कम से कम एक नामित प्रारंभकर्ता होना चाहिए। इसमें एक से अधिक हो सकते हैं। –

+0

ठीक है, जो मुझे नहीं पता था। धन्यवाद ! – stringCode