함수 본문 안에서 매개변수는 변수가 아니라 상수로 취급돼요. 매개변수의 값을 바꾸려고 하면 컴파일 시점 오류가 발생해요. 함수가 매개변수의 값을 바꾸고 싶다면, 이런 가변성을 명시적으로 드러내기 위해 in-out 매개변수를 사용해야 해요.
in-out 매개변수를 사용하려면 프로그래머는 다음 세 가지를 확실히 해야 해요:
inout 키워드를 : 기호와 타입 이름 사이에 써서 in-out 매개변수임을 명시적으로 표시해야 해요.&를 붙여서 수정할 수 있음을 명시적으로 표시해야 해요.이렇게 하면 함수는 in-out 매개변수의 내부 복사본을 만들고, 함수 본문에서 지시한 대로 수정한 다음, 함수가 반환될 때 수정된 값을 전달받은 변수에 다시 복사해요.
func updateVersion(_ record: inout (version: Int, title: String)) {
record.version += 1
}
var dbRecord = (version: 2, title: "Exercism")
updateVersion(&dbRecord)
// dbRecord is now (3, "Exercism")
in-out 매개변수와 관련해 알아 두어야 할 추가 규칙이 몇 가지 있어요.
1. in-out 매개변수가 있는 함수 안에서는 in-out 매개변수로 전달된 변수를 참조할 수 없어요.
2. 같은 함수에서 같은 변수를 여러 개의 in-out 매개변수로 전달할 수 없어요.
예를 들어 `inoutFunc(&mutVar, &mutVar)`는 컴파일러 오류를 발생시켜요.