https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html
인-아웃 매개 변수
함수 매개 변수는 기본적으로 상수입니다. 해당 함수의 본문 내에서 함수 매개 변수의 값을 변경하려고하면 컴파일 타임 오류가 발생합니다. 이는 실수로 매개 변수 값을 변경할 수 없음을 의미합니다. 함수가 매개 변수 값을 수정하도록하고 함수 호출이 종료 된 후에도 이러한 변경 사항이 유지되도록하려면 해당 매개 변수를 대신 in-out 매개 변수로 정의하십시오.
매개 변수 유형 바로 앞에 inout 키워드를 배치하여 in-out 매개 변수를 작성합니다. 인-아웃 매개 변수에는 함수에 전달되고 함수에 의해 수정되고 원래 값을 대체하기 위해 함수에서 다시 전달되는 값이 있습니다. in-out 매개 변수 및 관련 컴파일러 최적화의 동작에 대한 자세한 설명은 In-Out 매개 변수를 참조하십시오.
in-out 매개 변수에 대한 인수로만 변수를 전달할 수 있습니다. 상수와 리터럴은 수정할 수 없으므로 상수 또는 리터럴 값을 인수로 전달할 수 없습니다. in-out 매개 변수에 인수로 전달할 때 변수 이름 바로 앞에 앰퍼샌드 (&)를 배치하여 함수가 수정할 수 있음을 나타냅니다.
노트
In-out 매개 변수는 기본값을 가질 수 없으며 가변 매개 변수는 inout으로 표시 될 수 없습니다.
다음 은 a와 b라는 두 개의 인-아웃 정수 매개 변수가있는 swapTwoInts ( : :) 라는 함수의 예입니다 .
func swapTwoInts(_ a: inout Int, _ b: inout Int) {
let temporaryA = a
a = b
b = temporaryA
}
swapTwoInts ( : :) 함수는 b의 값을 a로, a의 값을 b로 바꿉니다 . 이 함수는 a 값을 temporaryA라는 임시 상수에 저장하고 b 값을 a에 할당 한 다음 temporaryA를 b에 할당하여이 스왑을 수행합니다.
Int 유형의 두 변수를 사용 하여 swapTwoInts ( : :) 함수를 호출하여 값을 바꿀 수 있습니다. 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