2015-04-29 7 views
9

UIViewControllerके लिए एक एक्सटेंशन लागू करने के लिए मुझे पता है कोई सामान्य तरीका है वहाँ, या इस कार्यों ओवरराइड करने के लिए (यहां तक ​​कि जब वे के लिए उपलब्ध हैं UICollectionViewController और UITableViewController) की अनुमति नहीं है कि प्रयास करते समय:UIViewController एक्सटेंशन स्विफ्ट में दृश्य संबंधित कार्यों को ओवरराइड करने की अनुमति नहीं दे रहा है?

extension UIViewController{ 
    public override func viewWillAppear(){ 
    super.viewWillAppear() 
    //do some stuff 
} 
} 

मुझे पता है कोई सामान्य तरीका है वहाँ, या इस कार्यों ओवरराइड करने के लिए (यहां तक ​​कि जब वे के लिए उपलब्ध हैं UICollectionViewController और UITableViewController) की अनुमति नहीं है कि:

  • viewDidLoad
  • viewWillLoad
  • viewWillAppear
  • viewDidAppear

किसी तरह यह करने के लिए नहीं है? मैं वहां कुछ कार्यान्वयन करना चाहता हूं और अपने ऐप पर प्रत्येक UIViewController के लिए काम करना चाहता हूं ... सभी एक ही स्थान पर।

कृपया ध्यान दें कि मैं एक नया वर्ग उपवर्गीकरण UIViewController बनाने के लिए नहीं करना चाहते हैं, उन तरीकों अधिभावी और करने के लिए अपने नियंत्रक बनाने यह विस्तार। यह स्पष्ट और सरल समाधान है, लेकिन यह मैं संतुष्ट नहीं करता कि मैं क्या करने की कोशिश कर रहा हूं।

मैं XCode में तेजी से 1.2 उपयोग कर रहा हूँ 6,3

+1

क्या आप थोड़ा _why_ समझा सकते हैं कि आप ऐसा करना चाहते हैं? मुझे लगता है कि मेरा मतलब क्या है, क्योंकि 'viewDidLoad' आदि मौजूद है, और आप उन्हें ओवरराइड करने के लिए बिल्कुल मौजूद हैं, और चूंकि एक सामान्य रूप से _does_ उन्हें ओवरराइड करता है (क्योंकि यह वही है जो वे हैं), आप क्या चाहते हैं _more_? – matt

+0

मैं वहां कुछ सामान लेना चाहता हूं, और अपने पदानुक्रम पर प्रत्येक UIViewController के लिए आगे बढ़ना चाहता हूं। आइए कहें, उदाहरण के लिए, यदि मैं UIViewController प्रस्तुत करता हूं तो कनेक्टिविटी होने पर मैं जांचना चाहूंगा। UIViewCollectionController के लिए यह संभव है, तो .. UIViewController के लिए क्यों नहीं? –

+1

"उदाहरण के लिए, यदि मैं एक UIViewController प्रस्तुत करता हूं तो कनेक्टिविटी होने पर मैं जांचना चाहता हूं" मुझे थोड़ा और दबाएं।आपको ऐसा करने की ज़रूरत क्यों है? क्या यह जांचने के लिए और अधिक समझदारी नहीं होगी कि क्या आपने हर बार कनेक्टिविटी को कनेक्ट किया है? – matt

उत्तर

12

आपको क्या करने की कोशिश कर रहे हैं इस कोड के द्वारा किया के समान है:

class MyClass { 
    func myFunc() {} 
} 

extension MyClass { 
    override func myFunc() {} 
} 

4 तरीकों कि आप ओवरराइड करने के लिए कोशिश कर रहे हैं UIViewController में परिभाषित किया गया है, और इसके सुपरक्लास में से एक नहीं है। और आप एक ही कक्षा में परिभाषित एक विधि को ओवरराइड नहीं कर सकते हैं।

अद्यतन

मैं समस्या को हल करने के लिए 2 अलग अलग तरीकों के बारे में सोच सकते हैं - पहले एक आप नहीं चाहते (UIViewController उपवर्गीकरण) है।

दूसरा एक तरीका स्विजिंग है - मैंने इसका कभी भी उपयोग नहीं किया है इसलिए मैं आपको गलत जानकारी प्रदान नहीं करना चाहता हूं। शायद यह नाट कुक द्वारा this article पढ़ने लायक है, जो आकस्मिक रूप से viewWillAppear को बदलने का एक उदाहरण दिखा रहा है।

+0

यह समझ में आता है। कोई कामकाज? –

+0

@HugoAlonso: शायद हाँ - अद्यतन उत्तर पढ़ें – Antonio

+0

@ एंटोनियो मैं तेजी से नया हूं, तो क्या आप मुझे बता सकते हैं कि एक्सटेंशन का उपयोग करने के लिए उद्देश्य या लाभ क्या है? उदाहरण के लिए टेबलव्यू डेटा क्यों विस्तारित करना स्रोत में सीधे मेरी कक्षा में नहीं? – Chlebta

संबंधित मुद्दे