아리의 iOS 탐구생활

Cannot use mutating member on immutable value: function call returns immutable value 본문

Swift/문제해결

Cannot use mutating member on immutable value: function call returns immutable value

Ari Lee 2021. 9. 13. 14:29
반응형

커스텀 타입을 설계하는 과정에서 'Cannot use mutating member on immutable value: function call returns immutable value' 라는 에러가 나와서 당황했다. 클래스와 구조체를 공부하면서 값타입 참조타입이 무엇인지 이해했다고 생각했으나 이 에러를 만나자마자 엥... 이게 뭐지...??? 갑자기 멘붕이 찾아와서 황급히 구글링을 시작했다.

 

 

내가 코드를 짜다가 발생했던 에러는 다음 예제와 같다.

class ClassType {
    let name: String
    var age: Int
    
    init(name: String, age: Int = 0) {
        self.name = name
        self.age = age
    }
}

struct StructType {
    var classtype = ClassType(name: "ari")
    
    mutating func add() -> ClassType {
        classtype = ClassType(name: "Ari")
        return classtype
    }
}

StructType().add()
//Cannot use mutating member on immutable value: function call returns immutable value

StructType 구조체 생성자가 응답한 결과를 변수에 담지 않고 바로 add() 를 호출하게 되면 위와 같은 에러가 난다.

 

 

찾아본 결과 구조체는 값타입이고 반환하는 값이 불변값이기 때문에 변수에 담아야지만 메서드를 정상적으로 호출할 수 있게 된다.

혹은 구조체를 클래스로 바꿔주어도 해결된다.

 

에러문구에 "function call returns immutable value"라고 나와있는걸로 봐선 Swift에서 함수의 return은 기본적으로 상수인듯 하다.    생성자도 함수의 일종이니.. return 원본을 바꿀 순 없고 원본을 변수 공간에 따로 copy한 것만 변경이 가능한 원리같다.

 

 

Reference

 

Swift and mutating struct

There is something that I don't entirely understand when it comes to mutating value types in Swift. As the "The Swift Programming Language" iBook states: By default, the properties of a value type

stackoverflow.com

 

Swift Cannot use mutating member on immutable value 에러가 무엇일까

왜 Cannot use mutating member on immutable value 에러가 발생할까?

zdodev.github.io

 

반응형
Comments