AFAIK, नहीं।
निम्न उदाहरण पर विचार करें:
typealias Height: Float
extension: Height {
}
यहाँ Height
, एक नए प्रकार नहीं है यह सिर्फ Float
ताकि आप केवल Float
का विस्तार कर रहे के लिए एक लेबल है। आप Dictionary
पर एक नज़र डालें तो यह है कि तुम क्या
extension BeaconID {}
विशिष्ट सामान्य मानकों के साथ Dictionary
के लिए एक विस्तार जोड़ रहा है के साथ प्राप्त करने की कोशिश होगी तो public struct Dictionary<Key : Hashable, Value> : CollectionType, DictionaryLiteralConvertible
है।
मैं क्या उम्मीद करेंगे कि आप ऐसा करने में सक्षम होना चाहिए:
typealias BeaconID = Dictionary<Key: String, Value: NSObject>
लेकिन वह भी संकलन नहीं है और है कि क्योंकि स्विफ्ट में आप typealias आंशिक प्रकार (दूसरे शब्दों में सामान्य प्रकार के बिना नहीं कर सकते विशिष्ट जेनेरिक पैरामीटर प्रकार। अधिक जानकारी के लिए here देखें)। सामान्य प्रकार के जो जवाब नीचे विख्यात है typealiasing के लिए एक संभावित समाधान, मैं
struct Wrapper<Key: Hashable, Value> {
typealias T = Dictionary<Key, Value>
}
typealias BeaconID = Wrapper<String, NSObject>.T
लेकिन फिर भी तब जब आप BeaconID
फैलाने का प्रयास करते हैं, तो आप एक संकलक चेतावनी है, जो अंत में समस्या के दिल में हो जाता है मिलता है से जुड़ा हुआ:
मैं अपने कोड को साफ करने का प्रयास किया "कंस्ट्रेन्ड विस्तार एक 'जहां' खंड द्वारा निर्दिष्ट बाधाओं के साथ unspecialized सामान्य प्रकार 'शब्दकोश' पर घोषित किया जाना चाहिए" और वास्तव में यह त्रुटि आई: 'विवश विस्तार घोषित किया जाना चाहिए एक 'जहां' सीएल द्वारा निर्दिष्ट बाधाओं के साथ unspecialized जेनेरिक प्रकार 'शब्दकोश' पर ause' – BallpointBen
हाँ मुझे यह भी मिला, आप नीचे मेरा पूरा जवाब देख सकते हैं। असल में ऐसा नहीं लगता है कि निर्दिष्ट जेनेरिक प्रकारों को विस्तारित करना संभव है, केवल वे लोग जहां सामान्य प्रकार अभी तक सेट नहीं किए गए हैं। – barndog
@ रॉबर्ट जो मुझे स्विफ्ट 3 में देखना पसंद है, प्रोटोकॉल और विरासत पर केवल बाधाओं पर नहीं बल्कि मूल्यों पर भी कुछ है, जैसे 'विस्तार कुछ ऐसा जहां स्वयं == .MyCase'। इस तरह कार्यक्षमता केवल विशिष्ट enum मामलों पर परिभाषित किया जा सकता है। – barndog