https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
In-Out Parametreleri
İşlev parametreleri varsayılan olarak sabittir. Bir işlev parametresinin değerini o işlevin gövdesinden değiştirmeye çalışmak, derleme zamanı hatasıyla sonuçlanır. Bu, yanlışlıkla bir parametrenin değerini değiştiremeyeceğiniz anlamına gelir. Bir işlevin bir parametrenin değerini değiştirmesini istiyorsanız ve bu değişikliklerin işlev çağrısı bittikten sonra da devam etmesini istiyorsanız, bunun yerine bu parametreyi bir in-out parametresi olarak tanımlayın.
İnout anahtar sözcüğünü bir parametrenin türünün hemen önüne yerleştirerek bir in-out parametresi yazarsınız. Bir in-out parametresi, işleve iletilen, işlev tarafından değiştirilen ve orijinal değeri değiştirmek için işlevden geri gönderilen bir değere sahiptir. Giriş-çıkış parametrelerinin davranışına ve ilgili derleyici optimizasyonlarına ilişkin ayrıntılı bir tartışma için, bkz. Giriş-Çıkış Parametreleri.
Yalnızca bir in-out parametresi için bağımsız değişken olarak bir değişkeni iletebilirsiniz. Değişken olarak bir sabit veya değişmez değer iletemezsiniz, çünkü sabitler ve değişmezler değiştirilemez. İşlev tarafından değiştirilebileceğini belirtmek için, bir in-out parametresine bağımsız değişken olarak ilettiğinizde, bir değişken adının hemen önüne bir ve işareti (&) koyarsınız.
NOT
In-out parametrelerinin varsayılan değerleri olamaz ve variadic parametreler inout olarak işaretlenemez.
Aşağıda , a ve b adında iki giriş-çıkış tamsayı parametresine sahip swapTwoInts ( : :) adlı bir fonksiyon örneği verilmiştir :
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
SwapTwoInts ( : :) işlevi basitçe b'nin değerini a'ya ve a'nın değerini b'ye değiştirir. İşlev, bu takas işlemini, a'nın değerini geçiciA adı verilen geçici bir sabit içinde saklayarak, b'nin değerini a'ya atayarak ve ardından geçici A'yı b'ye atayarak gerçekleştirir.
Değerlerini takas etmek için swapTwoInts ( : :) işlevini Int türünde iki değişkenle çağırabilirsiniz . SwapTwoInts ( : :) işlevine aktarıldıklarında someInt ve anotherInt adlarının önünde bir ve işareti bulunduğunu unutmayın :
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"
Yukarıdaki örnek, someInt ve anotherInt'in orijinal değerlerinin, başlangıçta işlevin dışında tanımlanmış olsalar bile swapTwoInts ( : :) işlevi tarafından değiştirildiğini gösterir .
NOT
Giriş-çıkış parametreleri, bir fonksiyondan değer döndürmekle aynı şey değildir. Yukarıdaki swapTwoInts örneği bir dönüş türü tanımlamaz veya bir değer döndürmez, ancak yine de someInt ve anotherInt değerlerini değiştirir. Giriş-çıkış parametreleri, bir işlevin işlev gövdesinin kapsamı dışında bir etkiye sahip olması için alternatif bir yoldur.
public func getQuestionList(inout language: String) -> NSArray