현제의 현재이야기

[swift] 기초 문법 7일차(프로퍼티) 본문

IOS/swift

[swift] 기초 문법 7일차(프로퍼티)

현재의 현제 2022. 9. 14. 14:18

열거형 안의 프로퍼티는 무조건 연산 프로퍼티만 가능하다. 연산 프로퍼티는 읽기 전용이고, 쓰기 전용만은 안된다.

읽기와 쓰기를 다하는 연산은 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