आपकी कक्षा के साथ एक अलग समस्या यह है कि delegate
में ठोस प्रकार नहीं है। आप इसे MyViewController.Delegate?
घोषित करने से दूर हो सकते हैं क्योंकि यह एक वैकल्पिक प्रकार है और .None
हो सकता है। लेकिन यह सिर्फ आपके निजी myFunc
मृत कोड बनाता है। केवल अंकन, कक्षाएं और संरचनाएं प्रोटोकॉल पर अनुरूप कर सकती हैं। उन तीनों में से कौन सा प्रकार delegate
है?
उसने कहा, यह आपकी समस्या का कारण नहीं है। जब मैं delegate
के लिए वास्तविक प्रकार बना देता हूं और इसे Delegate
प्रोटोकॉल के अनुरूप बना देता हूं, तो मुझे अभी भी वही त्रुटि मिलती है।
class MyViewController: UIViewController {
protocol Delegate {
func eventHappened()
}
class Classy: Delegate {
func eventHappened() {
print("eventHappened")
}
}
var delegate: Classy? = Classy()
func myFunc() {
delegate?.eventHappened()
}
}
एक गूढ़ व्यायाम इस एक वर्ग कर सकता, लेकिन कोई भी हर एक वर्ग के अंदर एक प्रोटोकॉल घोषित करने के लिए प्रयास करना चाहिए क्या की सीमा से आगे बढ़ाने में दिलचस्प हो सकता है के रूप में। प्रोटोकॉल सभी प्रकार की रचना और संग्रह के बारे में हैं। जब आप एक ही बाहरी कक्षा में होने के लिए सीमित होते हैं तो कोई कोड पुन: उपयोग परिदृश्य नहीं होता है।
स्रोत
2016-03-17 20:31:57
इस वर्ग के उपयोगकर्ताओं द्वारा प्रतिनिधि प्रोटोकॉल लागू किए जाने का इरादा है। आप जो समस्या के रूप में वर्णन कर रहे हैं वह कोई समस्या नहीं है- यह एक आवश्यक सॉफ़्टवेयर डिज़ाइन पैटर्न है जो पूरे ऐप्पल के कोको और कोको टच फ्रेमवर्क में उपयोग किया जाता है। –
आप कोकोआ _ (और एक्सटेंशन, ऑब्जेक्टिव-सी और स्विफ्ट द्वारा, प्रतिनिधियों को कोको के साथ मिलकर डिज़ाइन किया गया था और बाद में मुख्य रूप से कोको ऐप्स के लिए डिज़ाइन किया गया था) में एप्पल के [ कोको कोर योग्यता गाइड, प्रतिनिधि अनुभाग] (https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/Delegation.html#//apple_ref/doc/uid/TP40008195-CH14-SW1)। –