기어가더라도 제대로

[SwiftUI-기초] UserDefaults 와 SwiftUI 본문

SwiftUI - 기초

[SwiftUI-기초] UserDefaults 와 SwiftUI

Damagucci-juice 2022. 11. 23. 23:43
  • 상황
    • 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 타입 저장

Comments