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 | 31 |
Tags
- map
- UICollectionView
- Xcode
- 애니메이션
- 리펙토링
- uiscrollview
- ribs
- MVVM
- combine
- collectionview
- HIG
- uitableview
- rxswift
- clean architecture
- RxCocoa
- tableView
- swift documentation
- Human interface guide
- Protocol
- swiftUI
- ios
- 리펙터링
- Observable
- 클린 코드
- 리팩토링
- SWIFT
- Clean Code
- UITextView
- 스위프트
- Refactoring
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 19. @propertyWrapper 이용하여 UserDefault쓰기 본문
@propertyWrapper란?
- @propertyWrapper: 프로퍼티를 한번 감쌓아서 get, set을 wrapping
- 사용할땐 struct이름 어노테이션으로 접근
예시1) @propertyWrapper를 통해서 항상 10보다 작은 값을 유지하는 property 만드는 방법
TenOrLess라는 wrapper를 통해 10이하의 수만 리턴되도록 하는 변수 정의
@TenOrLess var value: Int
value = 12
print(value) // 10
- 어노테이션으로 접근할 struct의 이름 위 @propertyWrapper 기입
@propertyWrapper
struct TenOrLess {
// wrappedValue 정의
}
- var wrappedValue라는 이름의 computed-property정의
: 해당 어노테이션에 접근하는 경우 변수의 get, set을 이곳에서 정의된 방식으로 동작
@propertyWrapper
struct TenOrLess {
private var number = 0
var wrappedValue: Int {
get {
return number
}
set {
number = min(newValue, 10)
}
}
}
예시2) @propertyWrapper를 통해서 UserDefault 만드는 방법
1) 프로퍼티 선언
(checkEventViewWillAppear라는 프로퍼티를 쓸건데, 이것을 UserDefaultWrapper라는 자료형에 정의할 예정)
- checkEventViewWillAppear라는 프로퍼티의 인수는 key, defaultValue를 갖음 / 로직은 @UserDefaultWrapper에 정의
*필수: 어노테이션 표기 / 인수 값 표시
struct UserDefaultsManager {
@UserDefaultWrapper(key: "checkEvnetViewWillAppear", defaultValue: false)
static var checkEventViewWillAppear
}
2) @UserDefaultWrapper에 로직 정의
*필수
- 어노테이션인, @propertyWrapper를 struct위에 기입
- "var wrappedValue"라는 이름으로 get/set정의
@propertyWrapper
fileprivate struct UserDefaultWrapper<E> {
private let key: String
private let defaultValue: E
init(key: String, defaultValue: E) {
self.key = key
self.defaultValue = defaultValue
}
var wrappedValue: E {
get {
return UserDefaults.standard.object(forKey: key) as? E ?? defaultValue
}
set {
UserDefaults.standard.set(newValue, forKey: key)
}
}
}
3) 사용
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if UserDefaultsManager.checkEventViewWillAppear {
print("이전에 발생")
} else {
print("처음")
UserDefaultsManager.checkEventViewWillAppear = true
}
}
}
'iOS 실전 (swift)' 카테고리의 다른 글
Comments