mutating
키워드
- struct안에 있는 프로퍼티 값을 변경시킨다고 무조건
mutating
붙히는 게 아니다!
- 아래와 같은 경우에만
mutating
키워드를 붙힌다.
- 변경되는 값이 값 타입일 경우에만 mutating을 붙힌다.
- 만약 변경되는 값이 참조타입이지만 주소값이 변경이된다면
mutating
을 붙힌다.(아래의 예들을 통해서 이해를 해보자)
- 아래 예의 경우, 변경되는 값은 참조타입인
Array
속 프로퍼티가 변하는 것이기에 mutating
을 붙히지 않아도된다.(elements가 변해도 array 프로퍼티가 참조하고 있는 Array() 객체의 주소 값이 변하는 것은 아니기에!)
// 가능하다.
class Array {
var elements = [1,2,3,4,5]
}
struct TestStruct {
var array = Array()
// mutating 없이도 가능하다!
func changeArrayClass() {
array.elements.append(3)
}
}
- 그러나, 만약 array를 바꾼다면? 그러면 아예 다른 주소값이 들어오는 것이기에
mutating
키워드를 추가해주어야된다.
class Array {
var elements = [1,2,3,4,5]
}
struct TestStruct {
var array = Array()
// mutating 없이도 가능하다!
mutating func changeArrayClass(_ intArray: [Int]) {
array = intArray
}
}
- 아래 예의 경우, 값 타입인 Array()의 복사값이 아예 변경되기에
mutating
키워드를 붙혀주어야된다.
// 불가능하다. -> mutating을 붙혀주면 가능하다.
struct Array {
var elements = [1,2,3,4,5]
}
struct TestStruct {
var array = Array()
func changeArrayClass() {
// 불가능하다. -> mutating을 붙혀주면 가능하다.
array.elements.append(3)
}
}