स्विफ्ट 2.0 के रूप में ऐसा लगता है कि हम अनुमानित परिस्थितियों पर लागू सामान्य प्रकार के एक्सटेंशन के करीब आ सकते हैं।स्विफ्ट "जहां" ऐरे एक्सटेंशन
हालांकि हम अभी भी ऐसा नहीं कर सकते:
protocol Idable {
var id : String { get }
}
extension Array where T : Idable {
...
}
... अब हम ऐसा कर सकते हैं:
extension Array {
func filterWithId<T where T : Idable>(id : String) -> [T] {
...
}
}
... और स्विफ्ट व्याकरण की दृष्टि से यह स्वीकार करता है। हालांकि, मेरे जीवन के लिए मैं यह समझ नहीं सकता कि जब मैं उदाहरण फ़ंक्शन की सामग्री भरता हूं तो संकलक को खुश कैसे किया जाए। मान लीजिए मैं संभव के रूप में स्पष्ट रूप से थे:
extension Array {
func filterWithId<T where T : Idable>(id : String) -> [T] {
return self.filter { (item : T) -> Bool in
return item.id == id
}
}
}
... संकलक फिल्टर करने के लिए प्रदान की बंद को स्वीकार नहीं करेगा, 'शिकायत प्रकार का एक तर्क सूची के साथ
आह्वान नहीं किया जा सकता' फिल्टर ' ((टी) -> बूल) '
इसी तरह यदि आइटम को इडेबल के रूप में निर्दिष्ट किया गया है। किसी को भी कोई भाग्य था?
आह उस अर्थ सही समझ में आता है हो सकता है, सीखने के लिए धन्यवाद :) –
@ yo.ian.g: आपका स्वागत है! –
क्या गैर-प्रोटोकॉल प्रकारों के साथ ऐसा करने का कोई तरीका है, जैसे 'एक्सटेंशन ऐरे जहां Iterator.Element: CGRect'? –