Variables are declared using the var keyword. These declarations are valid at the top level, within types, and within code bodies, and are respectively known as global variables, member variables, and local variables. Member variables are commonly referred to as properties.
Every variable declaration can be classified as either stored or computed.
Stored Property 저장 프로퍼티
: saves a value for use later
기본적으로 많이 쓰이는 저장을 위한 프로퍼티.
var name: String = ""
var koreanAge: Int = 0
Computed Property 연산 프로퍼티
: runs some code in order to calculate the value
특정한 연산을 수행해주기 위한 프로퍼티
use get { } set { } in computed properties to read-write
var AmericanAge: Int {
get {
return koreanAge - 1
}
set(inputValue) {
koreanAge = inputValue + 1
}
}
AmericanAge는 set에서 koreanAge에 원하는 연산을 해주고, 값을 가져올 때는 get을 통해 읽어오는 연산 프로퍼티.
get/set 다 사용하는 읽고 쓰는 프로퍼티 or 읽기 전용 프로퍼티
응용)
struct Money {
var currencyRate: Double = 1100
var dollar: Double = 0
var won: Double {
get {
return dollar * currencyRate
}
set {
dollar = newValue / currencyRate
}
}
}
set에 따로 매개변수 이름을 넣어주지 않으면 내장 newValue로 자동으로 들어오게 된다.
var myMoney = Money()
myMoney.dollar = 10
print(myMoney.won) //11000
이런 식으로 사용할 수 있음.
get set 사용 안하고 그냥 간단한 연산 변수로 선언해서 사용할 수도 있음.
Property Observers 프로퍼티 감시자
프로퍼티 값이 변경될 때 원하는 동작을 수행할 수 있도록 해준다.
struct Money {
var currencyRate: Double = 1100 {
willSet(newRate) {
print("환율이 \(currencyRate)에서 \(newRate)으로 변경될 예정입니다"
}
didSet(oldRate) {
print("환율이 \(oldRate)에서 \(currencyRate)으로 변경되었습니다")
}
}
var dollar: Double = 0 {
willSet {
print("\(dollar)달러에서 \(newValue)달러로 변경될 예정입니다"
}
didSet {
print("\(oldValue)달러에서 \(dollar)달러로 변경되었습니다"
}
}
}
여기서 currencyRate과 dollar는 값이 할당되어 있는 저장 프로퍼티.
이 저장된 프로퍼티의 값이 바뀔 때 willSet / didSet 이 실행되어 원하는 동작을 수행할 수 있도록 해준다.
매개변수를 따로 지정해주지 않으면 암시적 매개변수 newValue와 oldValue가 자동으로 들어옴
(프로퍼티 감시자는 저장된 프로퍼티의 값 변경을 감지하는 것이기 때문에 연산프로퍼티 안에서 사용할 수 없음.)
Property Wrappers
'Swift iOS 앱 개발 > Swift' 카테고리의 다른 글
[RxSwift] ReactiveX (0) | 2021.05.20 |
---|---|
SwiftUI (0) | 2021.05.15 |
[Swift ] Ternary Operator (0) | 2021.03.15 |
[Swift iOS] 상단 NavigationBar 설정 (0) | 2021.03.11 |
[Swift UIKit] All about UIButton() (0) | 2021.03.11 |