트랙
/
Swift
Swift
/
학습 과정
/
inout 매개변수
in

inout 매개변수 에서 Swift

1개의 연습 문제

inout 매개변수 소개

함수 본문 안에서 매개변수는 변수가 아니라 상수로 취급돼요. 매개변수의 값을 바꾸려고 하면 컴파일 시점 오류가 발생해요. 함수가 매개변수의 값을 바꾸고 싶다면, 이런 가변성을 명시적으로 드러내기 위해 in-out 매개변수를 사용해야 해요.

in-out 매개변수를 사용하려면 프로그래머는 다음 세 가지를 확실히 해야 해요:

  1. 함수 정의에서 매개변수의 타입 표기에 inout 키워드를 : 기호와 타입 이름 사이에 써서 in-out 매개변수임을 명시적으로 표시해야 해요.
  2. in-out 매개변수로 전달되는 값은 상수가 아니라 변수로 선언해야 해요. 마찬가지로 리터럴일 수는 없어요.
  3. 함수를 호출할 때 변수 이름 앞에 &를 붙여서 수정할 수 있음을 명시적으로 표시해야 해요.

이렇게 하면 함수는 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)`는 컴파일러 오류를 발생시켜요.
GitHub에서 편집 링크가 새 창이나 탭에서 열려요

inout 매개변수 배우기