1. Swift 의 function parameter는 기본적으로 상수(Constant)이다.
func addNumber(a: Int, b:Int) -> Int {
//parameter a 와 b 는 Constant 이다.
return a + b
}
인자로 들어온 a의 값을 변경하려고 하면 아래와 같은 에러메시지가 나타난다.
func addNumber(a: Int, b:Int) -> Int {
a = a + 10 // 에러발생: Cannot assign to value: 'a' is a 'let' constant
return a + b
}
2. 함수의 인자값을 변경하기 위한 키워드: inout
위의 함수에서 a 라는 인자로 들어온 값을 b로 변환해야 한다고 할 때, a 를 In-Out parameter 로 지정해주면 된다.
func addNumber(a: inout Int, b:Int) -> Int {
a = b
return a + b
}
In-Out parameter로 지정하면, a의 값으로 상수는 올 수 없다.
변수로 할당 후 &(ampersand 앰퍼샌드)를 붙여 사용해야 한다.
var a = 5
let result = addNumber(a: &a, b: 1)
print(result) // 출력: 2
3. 작동원리
inout 은 함수의 매개변수(parameter)에 대한 참조(reference)를 전달하는 방식으로 작동한다.
parameter의 주소값을 전달해주고, 주소를 참조하여 값을 변경하기 때문에 원본이 변경된다.
var a = 30
func addNumber(a: inout Int) {
a -= 10
}
addNumber(a: &a)
print(a) //출력: 20
위와 같이 상태값이 아닌 주소값을 이용하여 값을 변경하고 최적화 하는 방식을 call by reference 라고 부른다.
'iOS > Swift' 카테고리의 다른 글
[Swift] Collection Type - Set 알아보기 (0) | 2023.06.28 |
---|---|
[Swift] lazy property (0) | 2023.06.19 |
[Swift] Array Method (초기화, 추가, 삭제) (0) | 2023.05.30 |