일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Protocol
- init
- 디자인패턴
- initalizer
- String
- Class
- delegate
- extension
- IOS
- 이니셜라이저
- Unicode
- interpace
- optional
- Foundation
- struct
- 스위프트
- initializer
- property
- 코딩테스트
- Xcode
- Terminal
- instance
- UIKit
- enum
- Method
- tuist
- Git
- url
- type
- Swift
Archives
- Today
- Total
아리의 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 > 문제해결' 카테고리의 다른 글
[iOS/Tuist] Objective-C 코드가 포함된 라이브러리 의존성 주입시 발생하는 문제 (3) | 2023.02.27 |
---|---|
[Xcode Cloud] Tuist로 만든 프로젝트에 Xcode Cloud 적용하는 법 (2) | 2022.12.07 |
[URLRequst] 네트워크 요청 시 캐시 제어 하는 방법 (1) | 2022.09.23 |
Swift의 String index는 왜 정수가 아니지? 왜 구하기 어려울까? (1) | 2021.09.13 |
atomically는 프로그래밍에서 무슨 뜻일까... (0) | 2021.09.13 |
Comments