정의
- 특정 메서드 내에서 구조체 또는 열거형의 프로퍼티를 수정해야 하는 경우 해당 메서드의 동작을 변경하도록 하는 것
- 구조체는 값 타입이기때문에 인스턴스 메서드 내에서 프로퍼티를 수정할 수 없습니다.
- 구조체에서 메서드를 수정하기 위해 mutating 키워드를 사용할 수 있습니다.
예제
- Friend라는 구조체를 하나 생성했습니다.
- Friend구조체는 name과 age 프로퍼티, changeAge 메서드를 가지고 있습니다.
- 현재 코드를 실행해보면 구조체에서 메서드 안의 값을 수정하려고 했기 때문에 오류가 발생합니다.
struct Friend {
let name: String
var age: Int
init(name: String, age: Int) {
self.name = name.uppercased()
self.age = age
}
func changeAge() {
age = 10
}
}
- 이때, 메서드 앞에 mutating 키워드를 사용해 값 타입 프로퍼티를 수정할 수 있습니다.
struct Friend {
let name: String
var age: Int
init(name: String, age: Int) {
self.name = name.uppercased()
self.age = age
}
mutating func changeAge() {
age = 10
}
}
실행결과
- man이라는 변수에 arnold라는 name과 24의 age값을 지정해주었습니다.
- 그리고 man 변수에 changeAge() 메서드를 호출해 출력해보았습니다.
- 구조체임에도 불구하고 메서드 내에 10이라는 값이 출력될 것입니다.
struct Friend {
let name: String
var age: Int
init(name: String, age: Int) {
self.name = name.uppercased()
self.age = age
}
mutating func changeAge() {
age = 10
}
}
var man = Friend(name: "Arnold", age: 24)
man.changeAge()
print(man.age)
내용 출처
https://www.youtube.com/watch?v=0cZJlo6Pga4&list=PLgOlaPUIbynoqbQw_erl3L2w7vfOTCtFD&index=18
'iOS > Swift 문법 심화 학습' 카테고리의 다른 글
옵셔널 체이닝 [ Optional Chaining ] (0) | 2022.02.10 |
---|---|
inout (0) | 2022.02.09 |
제네릭 [ Generic ] (0) | 2022.02.08 |
고차함수 [ map, filter, reduce ] (0) | 2022.02.07 |
오류 처리 [ error handling ] (0) | 2022.02.04 |
댓글