728x90
과제가 머리속에 멤돈다
답을 줄 듯 말 듯하다
iOS 입덕부정기인건가...
Property Observer
스타크래프트 정찰병 observer를 생각해보자
저장 프로퍼티에서 사용되고 프로퍼티 값을 관찰(->observer)하다가 변경되었을 때 호출된다
get set 이 아닌 willSet, didSet 사용
willSet -> 값이 바뀌기 전에 사용
didSet -> 값이 바뀐 후 사용
struct BMI {
var nickname: String {
willSet(newNickaname) {
print("유저 닉네임이 \(nickname)에서 \(newNickaname)로 변경될 예정")
}
didSet {
print("유저 닉네입이 \(oldValue)에서 \(nickname)으로 변경 되었다")
}
}
default parameter newValue oldValue 사용 가능하다
인스턴스 생성시 초기화를 해야하는 상황이기 때문에 oldValue 쓸 수 있다 값이 이미 들어와 있는 상태
이니셜라이저로 초기화가 되는 속성에서는 값을 안줘도 된다
Struct 내에서 Property 변경하려면 mutating 키워드를 사용 해야한다
struct class 의 Property 값은 instance method 로 값 변경이 불가능하다
truct Coffee {
static var name = "아메리카노" // 타입 프로퍼티 인스턴스 내부에서 값 변경 불가
static var shot = 2
var price = 4900 // 인스턴스 프로퍼티로 값 변경 가능하다
mutating func plusShot() {
//Coffee.shot += 1 //명확하게 타입프로퍼티를 명시해줘야함
price += 300
}
//타입 메서드를 오버라이드해서 쓰고 싶다 minusShot -> 타입 function
//구조체는 상속이 안됨 재정의 자체가 안됨 class func는 오버라이드를 위한 함수여서
static func minusShot() {
shot -= 1
}
}
다시 말해서 내가 쓰는 인스턴스가 타입프로퍼티인지 인스턴스프로퍼티인지 확인 후 구조체 안에서 프로퍼티 값을 못 바꾼다
-> 바꾸고 싶다면 mutating 키워드를 붙여 주어야 함
-> class 사용 불가 상속이 불가능하기 때문에 struct 내에는 class 통해서 재정의 불가능
Class 내에서 타입 매서드 재정의 하고 싶다면 class로 재정의 해야한다
class Lattee: Coffee {
override class func minusShot() { //슈퍼클래스의 타입 메서들를 재정의해서 쓰고 싶다면 class!
}
'Tech > iOS' 카테고리의 다른 글
[iOS] Day 25 - Protocol (0) | 2022.07.28 |
---|---|
[iOS] Day 25 - UIPickerView & WebView (0) | 2022.07.28 |
[iOS] Day 23 - Computed Property (0) | 2022.07.26 |
[iOS] Day 22 - Xcode Tip, bundle File 생성 방법 (0) | 2022.07.25 |
[iOS] Day 19 - 첫 화면 구현 (0) | 2022.07.22 |