https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
इन-आउट पैरामीटर
फ़ंक्शन पैरामीटर डिफ़ॉल्ट रूप से स्थिरांक होते हैं। उस फ़ंक्शन के शरीर के भीतर से फ़ंक्शन पैरामीटर के मान को बदलने का प्रयास करने से संकलन-समय त्रुटि होती है। इसका मतलब है कि आप गलती से एक पैरामीटर का मान नहीं बदल सकते हैं। यदि आप एक पैरामीटर्स मान को संशोधित करने के लिए फ़ंक्शन चाहते हैं, और आप चाहते हैं कि फ़ंक्शन कॉल समाप्त होने के बाद वे परिवर्तन जारी रहें, तो उस पैरामीटर को इन-आउट पैरामीटर के रूप में परिभाषित करें।
आप पैरामीटर्स प्रकार से ठीक पहले इनआउट कीवर्ड डालकर एक इन-आउट पैरामीटर लिखते हैं। एक इन-आउट पैरामीटर का एक मान होता है जिसे फ़ंक्शन में पास किया जाता है, फ़ंक्शन द्वारा संशोधित किया जाता है, और मूल मान को बदलने के लिए फ़ंक्शन से वापस पारित किया जाता है। इन-आउट पैरामीटर और संबंधित संकलक अनुकूलन के व्यवहार की विस्तृत चर्चा के लिए, इन-आउट पैरामीटर देखें।
आप केवल एक इन-आउट पैरामीटर के तर्क के रूप में एक चर पास कर सकते हैं। आप एक निरंतर या शाब्दिक मान को तर्क के रूप में पारित नहीं कर सकते, क्योंकि स्थिरांक और शाब्दिक रूप को संशोधित नहीं किया जा सकता है। जब आप इसे एक इन-आउट पैरामीटर में एक तर्क के रूप में पास करते हैं, तो यह इंगित करने के लिए कि आप इसे फ़ंक्शन द्वारा संशोधित कर सकते हैं, सीधे एक एम्परसेंड (&) को एक वेरिएबल के नाम के साथ रखते हैं।
ध्यान दें
इन-आउट पैरामीटर में डिफ़ॉल्ट मान नहीं हो सकते हैं, और वेरिएडिक पैरामीटर को इनऑउट के रूप में चिह्नित नहीं किया जा सकता है।
यहाँ एक फ़ंक्शन का उदाहरण है जिसे swapTwoInts कहा जाता है : ( :), जिसमें दो इन-आउट पूर्णांक पैरामीटर हैं जिन्हें a और b कहा जाता है:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
SwapTwoInts ( : :) फ़ंक्शन बस a में b का मान और a में b का मान स्वैप करता है। फ़ंक्शन अस्थायी स्वैप नामक अस्थायी स्थिरांक में मान को संग्रहीत करके इस स्वैप को निष्पादित करता है, b के a को मान प्रदान करता है, और फिर अस्थायी को b को असाइन करता है।
आप swapTwoInts को कॉल कर सकते हैं : ( :) उनके प्रकारों को स्वैप करने के लिए Int के दो चर प्रकार के साथ कार्य करते हैं। ध्यान दें कि someInt और otherInt के नाम एक स्वप्रेरणा के साथ उपसर्ग किए गए हैं जब वे swapTwoInts ( : :) फ़ंक्शन:
var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
// Prints "someInt is now 107, and anotherInt is now 3"
ऊपर दिए गए उदाहरण से पता चलता है कि someInt और otherInt के मूल मूल्यों को swapTwoInts ( : :) फ़ंक्शन द्वारा संशोधित किया गया है , भले ही वे मूल रूप से फ़ंक्शन के बाहर परिभाषित किए गए हों।
ध्यान दें
इन-आउट पैरामीटर किसी फ़ंक्शन से मान वापस करने के समान नहीं हैं। ऊपर दिए गए swapTwoInts उदाहरण एक रिटर्न प्रकार को परिभाषित नहीं करते हैं या एक मूल्य वापस नहीं करते हैं, लेकिन यह अभी भी कुछInt और SecondInt के मूल्यों को संशोधित करता है। किसी कार्य के लिए इन-आउट पैरामीटर एक वैकल्पिक तरीका है जिससे उसके फ़ंक्शन बॉडी के दायरे से बाहर का प्रभाव पड़ता है।
public func getQuestionList(inout language: String) -> NSArray