apple/Docs, iOS, Swift
Swift nonmuating, mutating
lgvv
2024. 8. 14. 22:00
Swift nonmuating, mutating
- nonmutating은 해당 인스턴스의 상태를 변경하지 않음을 나타냄.
- 기본적으로 struct나 enum의 메소드는 인스턴스의 프로퍼티를 변경할 수 없음.
- nonmutating 키워드는 인스턴스의 프로퍼티를 변경하지 않고 값을 설정할 수 있도록 허용
- 다른말로 인스턴스 자체를 변경하지 않으면서 내부적으로 상태 조작 가능.
- Swift 언어의 발전에서 propertywrapper, macro를 이해하는데 도움.
예제 1
private struct MyStruct {
private var value: Int = 0
// ✅
mutating func increment() {
value += 1
}
// ❌ 내부 value type을 변경할 수 없어서 컴파일 에러
nonmutating func increment() {
value += 1
}
}
예제 2
private var mutableValue: Int {
get {
return value
}
nonmutating set {
// ❌ 내부 value type을 변경할 수 없어서 컴파일 에러
value = newValue
}
}
private var mutableValue: Int {
get {
return value
}
nonmutating set {
// ✅ 내부 값이 아니므로 해당 케이스는 가능.
UserDefault.standard.set("value", forKey: "key")
}
}
예제 3
struct MyStruct {
private var value: Int = 0
// ✅ value 변경 가능
mutating func increment() {
value += 1
}
// ❌ value 변경 불가
func increment() {
value += 1
}
}
(참고)
https://ios-development.tistory.com/1163
https://02infinity.medium.com/swifts-mutating-and-nonmutating-keywords-db49adbdcf1c