https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
Parameter Masuk-Keluar
Parameter fungsi adalah konstanta secara default. Mencoba mengubah nilai parameter fungsi dari dalam tubuh fungsi itu menghasilkan kesalahan waktu kompilasi. Ini berarti Anda tidak dapat mengubah nilai parameter secara tidak sengaja. Jika Anda ingin sebuah fungsi mengubah nilai parameter, dan Anda ingin perubahan tersebut tetap ada setelah panggilan fungsi berakhir, tetapkan parameter itu sebagai parameter masuk-keluar.
Anda menulis parameter masuk-keluar dengan menempatkan kata kunci masuk tepat sebelum jenis parameter. Parameter masuk-keluar memiliki nilai yang diteruskan ke fungsi, dimodifikasi oleh fungsi, dan dikirim keluar fungsi untuk menggantikan nilai asli. Untuk pembahasan mendetail tentang perilaku parameter masuk-keluar dan pengoptimalan compiler terkait, lihat Parameter Masuk-Keluar.
Anda hanya dapat mengirimkan variabel sebagai argumen untuk parameter masuk-keluar. Anda tidak dapat meneruskan konstanta atau nilai literal sebagai argumen, karena konstanta dan literal tidak dapat diubah. Anda menempatkan ampersand (&) tepat sebelum nama variabel ketika Anda meneruskannya sebagai argumen ke parameter masuk-keluar, untuk menunjukkan bahwa itu dapat dimodifikasi oleh fungsi.
CATATAN
Parameter masuk-keluar tidak boleh memiliki nilai default, dan parameter variadic tidak dapat ditandai sebagai masuk.
Berikut adalah contoh fungsi yang disebut swapTwoInts ( : :), yang memiliki dua parameter bilangan bulat masuk-keluar yang disebut a dan b:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
The swapTwoInts ( : :) hanya menukar nilai b menjadi a, dan nilai a menjadi b. Fungsi melakukan pertukaran ini dengan menyimpan nilai a dalam konstanta sementara yang disebut temporaryA, menetapkan nilai b ke a, dan kemudian menetapkan sementaraA ke b.
Anda dapat memanggil fungsi swapTwoInts ( : :) dengan dua variabel bertipe Int untuk menukar nilainya. Perhatikan bahwa nama someInt dan anotherInt diawali dengan ampersand saat diteruskan ke fungsi 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"
Contoh di atas menunjukkan bahwa nilai asli someInt dan anotherInt dimodifikasi oleh fungsi swapTwoInts ( : :), meskipun awalnya ditentukan di luar fungsi.
CATATAN
Parameter masuk-keluar tidak sama dengan mengembalikan nilai dari suatu fungsi. Contoh swapTwoInts di atas tidak mendefinisikan tipe pengembalian atau mengembalikan nilai, tetapi masih mengubah nilai someInt dan anotherInt. Parameter masuk-keluar adalah cara alternatif agar suatu fungsi memiliki efek di luar ruang lingkup badan fungsinya.
public func getQuestionList(inout language: String) -> NSArray