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

 

[iOS - SwiftUI] DynamicProperty 개념 (+ nonmutating set)

목차) SwiftUI의 기본 - 목차 링크 DynamicProperty 란? DynamicProperty는 update()라는 메소드가 있고, 내부적으로 이 메소드가 불리며 뷰를 업데이트 시키는데 사용되는 protocol DynamicProperty 코드 update() 메소

ios-development.tistory.com

https://02infinity.medium.com/swifts-mutating-and-nonmutating-keywords-db49adbdcf1c

 

Swift’s mutating and nonmutating keywords

Understand these access modifiers.

02infinity.medium.com