तुम भी अन्य कार्यों के लिए इसी तरह की एक आवश्यकता हो सकती है और उन सब पूर्णांक के लिए लागू करने और बिंदु प्रकार (या अन्य "summable" बातें) चल बड़े पैमाने पर कोड दोहराव का कारण होगा।
एक आंशिक समाधान, विशेष रूप से के लिए +, -, *, /,% IntegerArithmeticType को प्रोटोकॉल अनुरूपता की आवश्यकता होती है:
func example<T: IntegerArithmeticType>(x: T, y: T) -> T { return x + y }
println(example(40, 2)) // --> 42
यह चल बिन्दु प्रकार पर लागू नहीं होता क्योंकि वे अतिप्रवाह संचालन परिभाषित को लागू नहीं करते _IntegerArithmeticType प्रोटोकॉल में, जो IntegerArithmeticType से विरासत में आता है।
हालांकि, एक विशिष्ट विश्व स्तर पर परिभाषित ऑपरेटर समारोह अनुरूपता के लिए प्रकार का विस्तार नहीं "के रूप में कष्टप्रद" के रूप में आपको लगता है हो सकता है:
protocol Summable { func +(lhs: Self, rhs: Self) -> Self }
extension Int: Summable {}
extension Double: Summable {}
extension String: Summable {}
// extension for any other types... you are in full control!
आप एक बार ऐसा करते हैं, तो सर्वदा आप आप कोड में summable उपयोग कर सकते हैं:
func example<T: Summable>(x: T, y: T) -> T { return x + y }
println(example("4", "2")) // --> 42
दरअसल, और @connor ने इंगित किया, यह आपके द्वारा उल्लिखित @ जीन-फिलिपपेलेट के उत्तर के बराबर है।
मैं उम्मीद कर रहा था कि एक और तरीका होगा, क्योंकि इस तरह की कार्यक्षमता प्राप्त करने के लिए सिर्फ एक नया प्रोटोकॉल बनाना थोड़ा परेशान लगता है। कमांड-क्लैक ऑपरेशन मेरे लिए नया है, मुझे इसे आजमाने की आवश्यकता होगी। –