mutating
- 구조체(struct), 열거형(enum) 내부의 메서드가 해당 인스턴스의 속성을 변경할 수 있도록 허용하는 데 사용
구조체와 열거형은 값 타입!!
클래스는 참조 타입이므로 클래스의 메서드는 기본적으로 속성을 수정할 수 있음
그러나 값 타입인 구조체와 열거형은 메서드에서 인스턴스의 속성을 변경할 때는 'mutating' 키워드를 사용해야 함!
Class의 메서드 내 프로퍼티 변경
import UIKit
class Friend {
var name : String
// class의 프로퍼티의 name 값을 변경하는 메서드
func changeName(newName : String){
self.name = newName
}
init(_ name : String){
self.name = name
}
}
var myFriend = Friend("홍길동")
myFriend.changeName(newName: "김길동")
print(myFriend.name) // 김길동
- 'Friend' 클래스 내 'name' 프로퍼티를 수정하는 'changeName' 메서드를 생성
- class를 사용할 때는 'init()' 메서드(생성자)가 존재해야 함
- 'myFriend' 의 'name' 속성을 '홍길동' 에서 '김길동' 으로 변경
클래스는 참조 타입이기 때문에 메서드 내에서 프로퍼티 수정 가능
Struct의 메서드 내 프로퍼티 변경
'Cannot assign to property: 'self' is immutable' : 속성에 할당할 수 없습니다. 'self'는 변경할 수 없습니다.
→ 구조체와 열거형은 값 타입! 값 타입은 인스턴스 메서드 내에서 프로퍼티들을 수정할 수 없음. 'mutating' 키워드 사용!
import UIKit
struct Friend {
var name : String
// class의 프로퍼티의 name 값을 변경하는 메서드
mutating func changeName(newName : String){
self.name = newName
}
}
var myFriend = Friend(name: "홍길동")
myFriend.changeName(newName: "김길동")
print(myFriend.name) // 김길동
- 'mutating' 키워드를 사용하여 메서드 내에서 프로퍼티 값 변경 가능
참고)
https://www.youtube.com/watch?v=0cZJlo6Pga4
'Swift' 카테고리의 다른 글
Swift - Extension (확장) (0) | 2023.08.24 |
---|---|
Swift - Class, Struct, Enum (0) | 2023.08.23 |
Swift - DispatchQueue (0) | 2023.08.22 |
Swift - UserDefaults (0) | 2023.08.16 |
Swift - 키보드 올라옴 감지(NotificationCenter, Observer 사용) (0) | 2023.08.11 |