
다음은 계좌 잔액에서 은행 수수료를 뺀 값을 저장하는 프로퍼티를 만든 예제.
class BankAccount{
var accountBalance: Float = 0
var accountNum: Int = 0
let fees: Float = 25.00
var balanceLessFees: Float {
get {
return accountBalance - fees
}
}
// fee 상수 선언, 연산프로퍼티 balanceLessFees 설정, get으로 연산값을 받아옴.
set(newBalance) {
accountBalance = newBalance - fees
}
// set으로 값을 받아오는 것은 선택사항.
func displayBalance() {
print("Number \(accountNum)")
print("Current balance is \(accountBalance)")
}
class func getMaxBalance() -> Float {
return 100000.00
}
}
다음과 같이 값을 받아오거나 새 값을 설정할 수 있음.
var balance1 = account1.balanceLessFees
// 연산프로퍼티 balanceLessFees의 결과값을 받아옴.
account1.balanceLessFees = 150000.55
// account1 인스턴스의 balanceLessFees 값을 설정
클래스가 가진 리소스가 커서, 클래스가 제공되고 초기화되는데 시간이 오래 걸리고 뷰 로딩에 과부하가 올 수 있다.
이런 상황이 예상될 때, property 를 lazy로 선언해 그 값이 최초로 접근될 때만 class가 초기화되게 만들 수 있다.
class MyClass {
lazy var myProperty: String = {
var result = resourceIntensiveTask()
result = processData(data: result)
return result
}()
.
.
}
위의 예제에서, MyClass는 myProperty의 값이 하나라도 선언되거나 사용되기 전까지는 로딩되지 않는다.
이로써 효율적인 메모리 관리를 할 수 있게 된다!
📚 참고도서
[SwiftUI 기반의 iOS 프로그래밍]