반응형
참고: https://velog.io/@wook4506/iOS-Swift-Swift-문법을-알아보자-18편-mutating
Class && Struct && Enum 미완 enum추가
기존 글에서 클래스는 참조타입이고 구조체와 열거형은 값 타입이라고 정리를 했다.
그래서 값타입인 구조체에서는 인스턴스 메소드 내에서 프로퍼티들을 수정할 수 없게 되어있다.
때문에 이 프로퍼티들을 구조체 안에 있는 메소드에서 수정을 하려면 mutating이라는 키워드를 사용해야한다.
mutating
특정 메소드 내에서 구조체 또는 열거형의 프로퍼티를 수정해야하는 경우, 해당 메소드의 동작을 변경하도록 하는 것
예시를 보면 Person이라는 구조체에서 init을 통해 초기화를 해주어서 완벽한 코드처럼 보이지만 에러가 발생한다.
struct Person {
let name: String
var age: Int
init(name: String, age: Int) {
self.name = name.uppercased()
self.age = age
}
func changeAge() {
age = 10 //에러! Cannot assign to property: 'self' is immutable
}
}
위 에러는 바로 값타입인 구조체에서 메소드안의 값을 수정할 수 없기때문에 발생하는 것이다.
changeAge() 메소드 앞에 mutating을 붙여서 수정을 해보면
man 인스턴스를 처음 init할 때에는 24를 넣었지만 changeAge()메소드를 통해 age가 10으로 바뀌었다.
struct Person {
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 = Person(name: "Song", age: 24)
man.changeAge()
print(man.age)
반응형
'모바일앱 > Swift' 카테고리의 다른 글
1급 객체 (0) | 2022.11.27 |
---|---|
프로퍼티 옵저버(willSet / didSet) - 프로퍼티(2.5) (0) | 2022.11.25 |
연산프로퍼티 - 프로퍼티(2) (0) | 2022.11.22 |
저장프로퍼티 - 프로퍼티(1) (0) | 2022.11.21 |
[ios] shortening unwrapping 쇼트닝 언래핑 swift5.7 (0) | 2022.04.12 |
TIL220324_에러처리 Do try catch (0) | 2022.03.24 |
안전하게 배열에 접근하는 3가지 방법 (0) | 2022.03.10 |
Codable (0) | 2022.02.11 |