2014-06-08 5 views
5

यह कोड क्यों काम नहीं करता है?स्विफ्ट का उपयोग कर एक विस्तार रिटर्न में एक उत्परिवर्तन फ़ंक्शन कैसे करें?

protocol ExampleProtocol { 
    var simpleDescription: String { get } 
    mutating func adjust() 
} 
extension Int: ExampleProtocol { 
    var simpleDescription: String { 
    return "The number \(self)" 
    } 
    mutating func adjust() { 
     self += 42 
    } 
} 
var x:Int = 7 
let y:Int = x.adjust() 
यहाँ

मैं Xcode पर क्या मिलेगा

enter image description here

वहाँ प्रोटोकॉल में अपनी परिभाषा को बदले बिना() वापसी इंट समायोजित करने के लिए एक तरीका है?

उत्तर

5

हां, आप एक वापसी मूल्य समायोजित कर सकते हैं। प्रोटोकॉल और कक्षा में एक इंट वापस जाने के लिए यह निर्धारित करें, तो यह परिवर्तनशील विधि में ही लौट हैं:

protocol ExampleProtocol { 
    var simpleDescription: String { get } 
    mutating func adjust() -> Int 
} 
extension Int: ExampleProtocol { 
    var simpleDescription: String { 
    return "The number \(self)" 
    } 
    mutating func adjust() -> Int { 
     self += 42 
     return self 
    } 
} 
var x:Int = 7 
let y:Int = x.adjust() //49 
+0

हालांकि मैं प्रोटोकॉल को बदलना नहीं चाहता! – Carpsen90

+1

आपको प्रोटोकॉल को बदलने की ज़रूरत नहीं है, लेकिन यदि आप रिटर्न वैल्यू चाहते हैं तो आपको रिटर्न वैल्यू के साथ विधि को लागू करना होगा। यदि लागू विधि और प्रोटोकॉल-परिभाषित विधि में समान पैरामीटर नहीं हैं और मान वापस आते हैं, तो यह अभी भी काम करेगा लेकिन इसे प्रोटोकॉल को सही ढंग से कार्यान्वित नहीं माना जाएगा – connor

3

समायोजित() फ़ंक्शन मूल्य वापस नहीं करता क्योंकि (यह सिर्फ अपने उदाहरण का मूल्य बदल), आप इसे इस आदेश से प्राप्त कर सकते हैं:

var x:Int = 7 
x.adjust() //adjust x self value 
let y:Int = x //assigne x value to y 

आशा है कि इससे मदद मिलती है।

0

प्रश्न: प्रोटोकॉल में अपनी परिभाषा को बदले बिना समायोजन() वापसी Int बनाने का कोई तरीका है?

उत्तर: नहीं

परिभाषा/एक विधि के हस्ताक्षर हमें बताता है कि यह इनपुट और क्या डेटा प्रकार यह वापस जाने के लिए जा रहा है के रूप में लेने के लिए जा रहा है।

आपको किसी विधि से एक इंट वापस करने की आवश्यकता है तो यह हस्ताक्षर -> Int के साथ समाप्त होना चाहिए। यह वाक्यविन्यास है! इसे बदल नहीं सकता

connor आपको आवश्यक कोड का सही टुकड़ा प्रदान किया है।

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

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