develop
Property(Stored Property, Lazy Property, Computed Property, Property Observers, Type Property) 본문
iOS
Property(Stored Property, Lazy Property, Computed Property, Property Observers, Type Property)
pikachu987 2021. 2. 1. 20:52반응형
저장 프로퍼티(Stored Property)
struct Example {
var value: String
}
지연 프로퍼티(Lazy Property)
struct Example {
lazy var value: String = ""
}
let example = Example()
value에 접근하기 전까지 value는 메모리에 올라가지 않는다.
lazy는 let이 될수 없다. let으로 선언된 변수는 초기에 값이 있어야 하는데 lazy는 초기에 값이 존재하지 않고 접근시 값이 생기는 것이라 let을 사용할 수 없다.
만약 변수가 클로저로 되어서 스스로를 참조하면 캡쳐리스트로 메모리 누수를 방지 해야 한다.
class Example {
var value = ""
lazy var closure: () -> String = { [weak self] in
return "Hello \(String(describing: self?.value))"
}
}
연산 프로퍼티(Computed Property)
struct Example {
var value: String
var value2: String {
return "Example: \(value)"
}
}
value2는 연산 프로퍼티이고 return 하기전 여러가지 연산을 할수 있다.
읽기 전용으로 사용할 수 있다.
연산 프로퍼티는 lazy를 사용할 수 없다. lazy는 처음 접근시 메모리에 값을 올리고 그 이후로 메모리에 올라간 값을 사용하는데 연산 프로퍼티는 사용할 때 마다 연산하기 때문이다.
Set, Get
struct Example {
var value: String
var value2: String {
get {
return self.value
}
set {
self.value = newValue
}
}
}
이런식으로 사용할 수도 있다.
extension UITextField {
typealias Value = (text: String?, placeholder: String?)
var value: Value {
set {
self.text = newValue.text
self.placeholder = newValue.placeholder
}
get {
return (text: self.text, placeholder: self.placeholder)
}
}
}
프로퍼티 감시자(Property Observers)
struct Example {
var value: String {
willSet {
print(newValue)
}
didSet {
print(oldValue)
}
}
}
willSet은 값이 변경하기 전에 호출되고 변할 값을 newValue로 볼 수 있다.
didSet은 값이 변하고 난 다음 호출되고 변경하기 전 값을 oldValue로 볼 수 있다.
타입 프로퍼티(Type Property)
struct Example {
static var value: String = ""
}
static 대신 class을 사용할 수도 있다. 2021/01/17 - [iOS] - final Keyword 참조
static var나 static let은 swift3에서부터 lazy하게 동작한다.
https://docs.swift.org/swift-book/LanguageGuide/Properties.html# 참조
반응형
'iOS' 카테고리의 다른 글
DispatchWorkItem (0) | 2021.02.03 |
---|---|
LazySequence (0) | 2021.02.02 |
KVC KVO (Key-Value Coding, Key-Value Observing) (0) | 2021.01.31 |
Reference Equal 참조 비교하기 (0) | 2021.01.31 |
Struct Mutating (0) | 2021.01.30 |
Comments