मुझे किसी फ़ंक्शन के पैरामीटर के रूप में एक इंटरफ़ेस पास करना होगा। इंटरफ़ेस जेनेरिक a.k.a का एक संबद्ध प्रकार है। मुझे ऐसा करने का अच्छा तरीका नहीं मिला।स्विफ्ट में पैरामीटर के रूप में संबंधित प्रकार (जेनेरिक प्रोटोकॉल) के साथ प्रोटोकॉल कैसे पास करें?
protocol IObserver : class {
typealias DelegateT
...
}
class Observer: IObserver {
typealias DelegateT = IGeneralEventsDelegate // IGeneralEventsDelegate is a protocol
...
}
func notify(observer: IObserver) { ... } // here I need a type for observer param
मैंने पाया कि यह काम करेगा:: यहाँ मेरी कोड है
func notify<T: IObserver where T.DelegateT == IGeneralEventsDelegate>(observer: T) { ... }
, लेकिन आने उस पर भी जटिल है। क्या होगा यदि मैं इस चरम को कक्षा चर में सहेजना चाहता हूं, तो क्या मुझे इस कार्य के कारण पूरे वर्ग को सामान्य बनाना चाहिए।
यह सच है कि मैं सी ++ डेवलपर हूं और मैं स्विफ्ट भाषा के लिए नया हूँ, लेकिन जिस तरह से चीजें किया जाता है अभी तक बहुत जटिल है और उपयोगकर्ता अमित्र रहे हैं ... या मैं भी मूर्ख हूँ :)
में किया था मैं तो हर बार भी लगता है। असुविधा वास्तव में। सी ++ के संदर्भ में, मुझे लगता है कि स्विफ्ट का 'प्रोटोकॉल' 'अवधारणा 'जैसा दिखता है। और 'प्रोटोकॉल' के अनुरूप एक प्रकार का 'एक्सटेंशन' 'concept_map' जैसा ही है। ये सुविधाएं संकलन-समय बहुरूपता का एहसास करने के लिए उपयोगी हैं। हालांकि, हम कई मामलों में 'शुद्ध वर्चुअल क्लास' + 'एकाधिक विरासत' जैसे तंत्र चाहते हैं, जो रनटाइम पॉलीमोर्फिज्म को समझने के लिए जावा के 'इंटरफेस' से मेल खाता है। लेकिन स्विफ्ट में सामान्य प्रकार के लिए इनके लिए कोई तंत्र नहीं हो सकता है .. – findall
इस पर मेरा संबंधित उत्तर देखें ---> http://stackoverflow.com/a/34995198/5389500 – eonist