현제의 현재이야기
[swift] 기초 문법 7일차(프로퍼티) 본문
열거형 안의 프로퍼티는 무조건 연산 프로퍼티만 가능하다. 연산 프로퍼티는 읽기 전용이고, 쓰기 전용만은 안된다.
읽기와 쓰기를 다하는 연산은 get과 set을 사용한다.
struct Money {
var currencyRate: Double = 1390.03
var dollar: Double = 0
var won: Double {
get {
return dollar * currencyRate
}
set {
dollar = newValue / currencyRate
}
}
}
var moneyInMyPocket = Money()
moneyInMyPocket.won = 11000
print(moneyInMyPocket.won)
print(moneyInMyPocket.dollar)
moneyInMyPocket.dollar = 6
print(moneyInMyPocket.won)
print(moneyInMyPocket.dollar)
//11000.0
7.913498269821515
8340.18
6.0
set 블럭에서 암시적 매개변수 newValue를 사용할 수 있다.
Get, Set에 대한 이해
moneyInMyPocket.won이 11000원으로 되자, set(쓰기)로 인해 가장 최근의 won인 11000이 newValue로 들어가고, dollar가 7.91~ 이 됨.
그 후에 dollar가 6으로 들어왔을 때, moneyInMyPocket.won을 호출하면 get(읽기)에서 dollar * currencyRate가 return되어서 8340.18원이 된다.
프로퍼티 감시자
struct changeYen {
var currencyRate: Double = 9.73 {
willSet {
print("환율이 \(currencyRate)에서 \(newValue)로 바뀔 예정입니다...")
}
didSet {
print("환율이\(oldValue)에서 \(currencyRate)로 바뀌었습니다")
}
}
var yen : Double = 0
var won : Double {
get {
return yen * currencyRate
}
set {
yen = newValue / currencyRate
}
}
}
var myMoney : changeYen = changeYen()
myMoney.currencyRate = 9.74
myMoney.yen = 100
print(myMoney.won)
환율이 9.73에서 9.74로 바뀔 예정입니다...
환율이9.73에서 9.74로 바뀌었습니다
974.0
프로퍼티 감시자는 연산 프로퍼티가 아닌 저장 프로퍼티에만 가능하며, willSet, didSet 에는 newValue와 oldValue를 쓸 수 있다.
심도있는 프로퍼티.. 뭔가 파이썬의 확장판 같다.
'IOS > swift' 카테고리의 다른 글
[swift] 기초 문법 9일차 (0) | 2022.09.16 |
---|---|
[swift] 기초 문법 8일차(상속) (0) | 2022.09.15 |
[swift] 기초 문법 6일차(클로저) (0) | 2022.09.13 |
[swift] 기초 문법 5일차 (0) | 2022.09.12 |
[swift] 기초 문법 4일차 (0) | 2022.09.11 |
Comments