쓰는 상황
- 별도의 DB 없이 빠르고 간편하게 데이터를 사용하려 할 때 주로 사용
- 적은 양(512KB)의 데이터를 저장하는 데 적합한 형식
- 앱이 런칭될 때 함께 로드
- 사용자가 언제 마지막으로 접속했는지, 마지막으로 본 글이 무엇인지 등을 저장하기에 적합
UserDefaults
Apple Developer Documentation
developer.apple.com
App을 실행하는 동안 지속적으로 key-value로 저장하는 사용자의 기본 Database에 대한 Interface (Swift)
class UserDefaults : NSObject
📌 값 저장 및 변경
UserDefaults.standard.set(true, forKey: "isHuman")
📌 값 불러오기
// 저장하는 법과는 다르게 불러올 때는 Type에 따라 불러오는 법이 다름
// 값이 없는 경우에는 Array는 빈 배열을 반환하고, Int, Float, Double은 0을 반환
// String의 경우는 nil을 반환하기 때문에 꼭 Optional Binding을 해주어야 함
let name = UserDefaults.standard.string(forKey: "name") ?? ""
let footSize = UserDefaults.standard.integer(forKey: "footSize")
let isHuman = UserDefaults.standard.bool(forKey: "isHuman")
📌 값 삭제
UserDefaults.standard.removeObject(forKey: "isHuman")
AppStorage
Apple Developer Documentation
developer.apple.com
UserDefaults의 값을 반영하고 해당 UserDefaults의 값 변경에 대한 View를 invalidation하는 Property wrapper type (SwiftUI)
@frozen @propertyWrapper struct AppStorage<Value>
📌 값 저장(할당)
@AppStorage("isHuman") var isHuman: Bool = false
📌 값 변경
isHuman = true
📌 값 삭제
// UserDefault 메서드로 삭제해야 하는 듯..
UserDefaults.standard.removeObject(forKey: "isHuman")
정리
즉, UserDefaults는 별도의 DB 없이 Swift에서 사용되는 단일 데이터가 저장되는 객체이고, AppStorage는 SwiftUI에서 UserDefaults의 값을 상태값으로 접근해서 수월하게 변경을 반영하기 위해 만든 프로퍼티 래퍼인 것.
💡 AppStorage를 써서 데이터를 생성하면 UserDefaults에 저장됨. 단일 데이터를 저장하는 별도의 다른 2가지 방식이 아님 !!!!
결론
Swift에 있던 UserDefault를 SwiftUI에서 훨씬 간편하게 사용하기 위해 만든 프로퍼티 래퍼가 AppStorage임. 그러니까 SwiftUI에서는 AppStorage를 쓰는 게 좋다 ~!!
'iOS > SwiftUI' 카테고리의 다른 글
[SwiftUI] SwiftUI와 Firebase를 이용한 사용자 계정 관리 (회원가입) (1) | 2022.12.18 |
---|---|
[SwiftUI] SwiftUI의 Stack, Frame, GeometryReader (0) | 2022.11.30 |
[SwiftUI] SwiftUI로 커스텀 뷰 수정하기 (0) | 2022.11.22 |
[SwiftUI] SwiftUI로 커스텀 뷰 생성하기 (0) | 2022.11.14 |
[SwiftUI] Xcode 파일 뜯어보기 (0) | 2022.11.06 |