일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 데드락
- Codable
- deadlock
- forEach
- scrollview
- Linked List
- async
- 가상 메모리
- 동기화
- COLOR
- 알고리즘
- @state
- 프로세스 스케줄링
- Apple Developer Academy
- struct
- IOS
- core data
- decode
- 앨런
- 동시성
- 운영체제
- Algorithm
- 상호배제
- Swift
- 100 days of SwiftUI
- 인프런
- 비동기
- 오브젝트
- SwiftUI
- UserDefaults
Archives
- Today
- Total
기어가더라도 제대로
[SwiftUI-기초] UserDefaults 와 SwiftUI 본문
- 상황
- 1. 관찰되는 Data 클래스가 필요함
- 2. 그 데이터 클래스에는 [User] 타입을 들고 있는 @Published 프로퍼티가 필요함.
- 3. 이 Data에 init이 되고(Decoding), 값이 쓰여질 때마다 UserDefault 로 Encoding 하는 예제 코드 작성
- 참고. User 는 구조체
struct User: Codable, Identifiable, Equatable {
var id = UUID()
var name: String
}
class Data: ObservableObject {
@Published var users: [User] = [] {
didSet {
if let encoded = try? JSONEncoder().encode(users) {
UserDefaults.standard.set(encoded, forKey: "users")
}
}
}
init() {
if let savedItems = UserDefaults.standard.data(forKey: "users") {
if let decodedItems = try? JSONDecoder().decode([User].self, from: savedItems) {
users = decodedItems
return
}
}
users = []
}
}
// someView.swift
@StateObject var data = Data()
- 여기서 눈여겨 보아야할 점은.. User 타입이 구조체라는 것이다.
- 그래서 아주 수월하게 변경할 수 있었는데, 만약 User 타입이 클래스라면 어떻게 할 것인가?
- 또 프로퍼티를 찾아 넣는 로직이 문자열을 적고 있는데 이게 오탈자의 위험이 있는데 이는 어떻게 수정하면 좋을지?
- 좀 고민을 해보시고.. 어렵다면 다음화에 계속 ...
후속편
2022.11.24 - [SwiftUI - 기초] - [SwiftUI-기초] @Published 프로퍼티를 지닌 Codable 타입 저장
'SwiftUI - 기초' 카테고리의 다른 글
[SwiftUI-기초] URLSession 으로 Codable Data 받아오기 (0) | 2022.11.25 |
---|---|
[SwiftUI-기초] @Published 프로퍼티를 지닌 Codable 타입 저장 (0) | 2022.11.24 |
[SwiftUI-기초] Shape 를 복잡한 애니메이션 주기 (0) | 2022.11.22 |
[SwiftUI-기초] Shape 를 애니메이션 주기 - animatableData (0) | 2022.11.21 |
[SwiftUI-기초] BlendMode - 색상 혼합 (0) | 2022.11.20 |
Comments