Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- swift documentation
- 클린 코드
- collectionview
- ios
- 애니메이션
- Protocol
- 리펙토링
- RxCocoa
- 스위프트
- Observable
- rxswift
- Xcode
- Refactoring
- SWIFT
- map
- Human interface guide
- tableView
- Clean Code
- uiscrollview
- 리팩토링
- ribs
- uitableview
- swiftUI
- HIG
- UICollectionView
- 리펙터링
- UITextView
- clean architecture
- MVVM
- combine
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] (프로퍼티) Stored property vs Computed property vs Type property 본문
swift 5 문법
[iOS - swift] (프로퍼티) Stored property vs Computed property vs Type property
jake-kim 2021. 6. 16. 01:55Stored Property
- 정의: class, struct에서 instantce의 일부로 저장되는 상수(let) 또는 변수(var)
- default 값 또는 init을 사용하여 값 할당
- lazy property: 해당 property가 사용될 때 초기화
- let으로 선언 불가: let은 초기화가 완료 되기 전에 항상 값을 가져야 하므로
- property의 초기 값이 인스턴스의 초기화가 오나료 될 때까지 알 수 없는 외부 요인에 의존할 때 사용
- property의 초기 값에 복잡하거나 계산 비용이 많이 드는 설정이 필요할 때 or 필요할 때까지 수행해서는 안되는 경우에 사용
- lazy 주의 사항: lazy property는 여러 스레드에서 동시에 접근되고, 아직 초기화 되지 않은 경우 한 번만 초기화 된다는 보장이 없으므로 주의
Computed Property
- 실제로 값을 저장하지 않고 간접적으로 다른 property를 연산하여 getter, setter 제공
// 예제 참고: swift documentation
struct Point {
var x = 0.0, y = 0.0
}
struct Size {
var width = 0.0, height = 0.0
}
struct Rect {
var origin = Point()
var size = Size()
var center: Point {
get {
let centerX = origin.x + (size.width / 2)
let centerY = origin.y + (size.height / 2)
return Point(x: centerX, y: centerY)
}
set(newCenter) {
origin.x = newCenter.x - (size.width / 2)
origin.y = newCenter.y - (size.height / 2)
}
}
}
- set에 이름을 따로 지정하지 않을 경우, "newValue"로 사용
- get 키워드를 쓰지 않으면 자동으로 '읽기 전용' computed property로 사용
Property observer
- willSet(oldValue), didSet(newValue)
- stored property의 한 종류: 초기값이 없으면 컴파일 에러가 나므로, 초기값이 있기 때문에 stored property의 한 종류
ex) 초기값이 없으면 컴파일 에러가 발생 - computed property가 아닌 stored property
ex) 초기값을 넣어서 정상적으로 property observer 사용
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("About to set totalSteps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("Added \(totalSteps - oldValue) steps")
}
}
}
Type Property
- static을 이용하여 property를 표현
struct SomeStructure {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 1
}
}
* 참고
https://docs.swift.org/swift-book/LanguageGuide/Properties.html
'swift 5 문법' 카테고리의 다른 글
[iOS - swift] Async, Await 사용 방법 (0) | 2022.05.01 |
---|---|
[iOS - swift] 예약어를 변수로 사용 (backtic, `기호) (0) | 2021.06.23 |
[iOS - swift] (초기화) designated init vs convenience init (0) | 2021.06.16 |
[swift] 19. struct vs. class (0) | 2020.10.01 |
[swift] 18. 초기화(initialize) 심화 개념 (0) | 2020.10.01 |
Comments