2015-02-04 15 views
8

मैं स्विफ्ट में दो मूल्यों (उदा।) के tuples के लिए एक एक्सटेंशन लिखना चाहता हूं।क्या मैं स्विफ्ट में टुपल्स का विस्तार कर सकता हूं?

let t = (1, "one") 
let s = t.swap 

ऐसे s कि मूल्य ("one", 1) साथ प्रकार (String, Int) का होगा: उदाहरण के लिए, मैं इस swap विधि लिखने के लिए करना चाहते हैं। (मुझे पता है कि मैं इसके बजाय swap(t) फ़ंक्शन को आसानी से कार्यान्वित कर सकता हूं, लेकिन यह मेरी रूचि नहीं है।)

क्या मैं यह कर सकता हूं? मैं extension घोषणा में उचित प्रकार का नाम लिखना प्रतीत नहीं कर सकता।

इसके अतिरिक्त, और मुझे लगता है कि उत्तर वही है, क्या मैं 2-टुपल को दिए गए प्रोटोकॉल को अपनाने सकता हूं?

+1

[प्रकार के लिए स्विफ्ट दस्तावेज] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html) * नामित प्रकार * और * कंपाउंड प्रकार * के बीच distishingishes। नामित प्रकारों को बढ़ाया जा सकता है, लेकिन tuples (और कार्यों) यौगिक प्रकार हैं। –

+0

धन्यवाद, मार्टिन। ऐसा लगता है कि यह एक निश्चित "नहीं" है, फिर। क्या आप इसे एक उत्तर में बदल सकते हैं ताकि मैं इसे स्वीकार कर सकूं? –

+0

टुपल्स के साथ आप सबसे अधिक अनुकूलन पैरामीटर का नामकरण कर रहे हैं और इसके लिए 'टाइपियास' का उपयोग कर रहे हैं। कुछ और जटिल के लिए आपको 'स्ट्रक्चर' या वैश्विक कार्यों को परिभाषित करना चाहिए (शायद जेनेरिक के साथ) – DeFrenZ

उत्तर

21

आप स्विफ्ट में ट्यूपल प्रकारों का विस्तार नहीं कर सकते हैं। Types के अनुसार, वहाँ नामित प्रकार (जो बढ़ाया जा सकता है) और यौगिक प्रकार हैं। टुपल्स और फ़ंक्शंस कंपाउंड प्रकार हैं।

भी (जोर जोड़ा) देखें:

Extensions
एक्सटेंशन एक मौजूदा वर्ग, संरचना, या गणना प्रकार के लिए नई कार्यक्षमता जोड़ें।

5

उपर्युक्त राज्यों के उत्तर के रूप में, आप स्विफ्ट में टुपल्स का विस्तार नहीं कर सकते हैं। हालांकि, आपको केवल एक नंबर देने के बजाय, आप क्या कर सकते हैं class, struct या enum के अंदर टुपल बॉक्स करें और इसे बढ़ाएं।

struct TupleStruct { 
    var value: (Int, Int) 
} 
extension TupleStruct : Hashable { 
    var hashValue: Int { 
     return hash() 
    } 
    func hash() -> Int { 
     var hash = 23 
     hash = hash &* 31 &+ value.0 
     return hash &* 31 &+ value.1 
    } 
} 

func ==(lhs: TupleStruct, rhs: TupleStruct) -> Bool { 
    return lhs.value == rhs.value 
} 

एक तरफ ध्यान दें के रूप में, स्विफ्ट 2.2 में, अप करने के लिए 6 सदस्यों के साथ tuples अब Equatable हैं।

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

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