Geçtiğimiz günlerde ingilizce olarak bir içerik yayınladım fakat bu konunun önemli olduğunu düşündüğüm için bir de türkçe olarak tanımlamak istiyorum.

Swift programlama dilinde "inout" parametreleri, bir işlevin içindeki bir değeri değiştirmek ve bu değişiklikleri işlevin çağrıldığı yerde kalıcı hale getirmek için kullanılır.

Peki bu bizim ne işimize yarayacak diye düşündüğünüz oluyordur?

İnout parametreleri, işlevin çağrıldığı noktada belirtilen değişkenin değerini değiştirmenizi sağlar. İnout parametreleri, işlevin çağrıldığı noktada bir değeri iletebilir ve işlevin içinde bu değeri değiştirebilirsiniz. Bu işlevin çağrıldığı yerdeki orijinal değişkenin değerini değiştirmenizi ve işlevin dışındaki koda bu değişiklikleri yansıtmanızı sağlar.

Yani şu demek istiyor: Temp değerleri ile oynayabilirsiniz. Bunun çok kullanışlı birşey olduğunu ileride kullandıkça göreceksiniz.


func swapNumbers(_ a: inout Int, _ b: inout Int) {
let temp = a
a = b
b = temp
}

var num1 = 5
var num2 = 10

swapNumbers(&num1, &num2)

print("num1: \(num1), num2: \(num2)") // num1: 10, num2: 5


Yukarıdaki örnekte, swapNumbers işlevi, inout parametreleri ile num1 ve num2 değişkenlerini takas eder. İşlev çağrıldığında & işareti ile değişkenlere işaret edilir ve işlev içinde bu değişkenlerin değerleri değiştirilir. Sonuç olarak, işlevin çağrıldığı yerde num1 ve num2 değişkenlerinin değerleri takas edilir.

Yani 5 ve 10 diye iki numaranız var ve siz bunları a ve b'ye atadınız ama daha sonra bunları değiştirmek istediğiniz aklınıza geldi. Yani b ve a'nın değerlerini değitirip yeni a'yı 10 yeni b'yi 5 yapmak istiyorsunuz. İşte burada inout parametreleri devreye giriyor.

Önce bir constant yani değişmeyen temp oluşturup a'ya eşitliyoruz. Yani a'nı 5 değeri tempe geçiyor. Daha sonra bunu b'ye aktaracaksınız. Peki b'de 10'u nasıl taşıyorsunuz. O çok kolay direk a'yı b'ye eşitlerseniz b'deki 10 değeri a'ya geçmiş olacak. Daha sonraki tempi de b'ye verince işlem tamamdır.

İşte size swap numbers

Bu, işlevler arasında değerleri değiştirmeniz gerektiğinde veya işlevin çağrıldığı yerde değişiklikleri yansıtmak istediğinizde kullanışlı bir özelliktir.