https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
พารามิเตอร์เข้า - ออก
พารามิเตอร์ฟังก์ชันเป็นค่าคงที่โดยค่าเริ่มต้น การพยายามเปลี่ยนค่าของพารามิเตอร์ฟังก์ชันจากภายในเนื้อความของฟังก์ชันนั้นส่งผลให้เกิดข้อผิดพลาดเวลาคอมไพล์ ซึ่งหมายความว่าคุณไม่สามารถเปลี่ยนค่าของพารามิเตอร์โดยไม่ได้ตั้งใจ หากคุณต้องการให้ฟังก์ชันแก้ไขค่าของพารามิเตอร์และคุณต้องการให้การเปลี่ยนแปลงเหล่านั้นคงอยู่หลังจากการเรียกฟังก์ชันสิ้นสุดลงให้กำหนดพารามิเตอร์นั้นเป็นพารามิเตอร์เข้า - ออกแทน
คุณเขียนพารามิเตอร์เข้า - ออกโดยวางคีย์เวิร์ด inout ก่อนประเภทของพารามิเตอร์ พารามิเตอร์เข้า - ออกมีค่าที่ส่งผ่านไปยังฟังก์ชันถูกแก้ไขโดยฟังก์ชันและถูกส่งกลับออกจากฟังก์ชันเพื่อแทนที่ค่าเดิม สำหรับการอภิปรายโดยละเอียดเกี่ยวกับลักษณะการทำงานของพารามิเตอร์เข้า - ออกและการปรับแต่งคอมไพลเลอร์ที่เกี่ยวข้องโปรดดูพารามิเตอร์เข้า - ออก
คุณสามารถส่งผ่านตัวแปรเป็นอาร์กิวเมนต์สำหรับพารามิเตอร์เข้า - ออกเท่านั้น คุณไม่สามารถส่งผ่านค่าคงที่หรือค่าตามตัวอักษรเป็นอาร์กิวเมนต์ได้เนื่องจากไม่สามารถแก้ไขค่าคงที่และค่าตามตัวอักษรได้ คุณวางเครื่องหมายแอมเพอร์แซนด์ (&) ไว้หน้าชื่อตัวแปรโดยตรงเมื่อคุณส่งเป็นอาร์กิวเมนต์ไปยังพารามิเตอร์เข้า - ออกเพื่อระบุว่าฟังก์ชันสามารถแก้ไขได้
บันทึก
พารามิเตอร์เข้า - ออกต้องไม่มีค่าเริ่มต้นและไม่สามารถทำเครื่องหมายพารามิเตอร์ตัวแปรเป็น inout ได้
นี่คือตัวอย่างของฟังก์ชันที่เรียกว่า swapTwoInts ( : :) ซึ่งมีพารามิเตอร์จำนวนเต็มสองตัวที่เรียกว่า a และ b:
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
ฟังก์ชัน swapTwoInts ( : :) เพียงแค่เปลี่ยนค่าของ b เป็น a และค่าของ a เป็น b ฟังก์ชันดำเนินการแลกเปลี่ยนนี้โดยการจัดเก็บค่าของ a ในค่าคงที่ชั่วคราวที่เรียกว่าชั่วคราว A กำหนดค่าของ b ให้กับ a แล้วกำหนดค่าชั่วคราว A ให้กับ b
คุณสามารถเรียกใช้ฟังก์ชัน swapTwoInts ( : :) โดยมีตัวแปรประเภท Int สองตัวแปรเพื่อสลับค่า โปรดสังเกตว่าชื่อของ someInt และ anotherInt จะนำหน้าด้วยเครื่องหมายและเมื่อส่งผ่านไปยังฟังก์ชัน 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 และ anotherInt ถูกแก้ไขโดยฟังก์ชัน swapTwoInts ( : :) แม้ว่าเดิมจะถูกกำหนดไว้ภายนอกฟังก์ชัน
บันทึก
พารามิเตอร์เข้า - ออกไม่เหมือนกับการส่งคืนค่าจากฟังก์ชัน ตัวอย่าง swapTwoInts ด้านบนไม่ได้กำหนดประเภทการส่งคืนหรือส่งคืนค่า แต่ยังคงแก้ไขค่าของ someInt และ anotherInt พารามิเตอร์เข้า - ออกเป็นอีกทางเลือกหนึ่งสำหรับฟังก์ชันที่จะมีผลกระทบภายนอกขอบเขตของเนื้อหาฟังก์ชัน
public func getQuestionList(inout language: String) -> NSArray