⭐️@AppStorage / UserDefaults⭐️
앱을 사용하다가 잠시 껐을 때 (혹은 꺼졌을 때) 데이터가 저장되어야 하는 경우가 있다. (사실 대부분이겠지만..)
방대한 데이터나 정말 중요한 데이터들은 코어데이터나 서버를 활용해야겠지만
작은 데이터를 손쉽게 저장할 수 있는 방법 중 하나가 바로 UserDefaults이다.
UserDefaults는 앱이 실행되는 동안 데이터를 유지하기 위해 사용되는 인터페이스이다.
일반적으로 키-값 쌍으로 저장되는 데이터를 관리하며 키-값 쌍을 통해 접근할 수 있다. (forKey)
UserDefaults를 사용하면 앱의 설정 정보나 사용자의 환경 설정, 최근 검색어 등을 저장할 수 있다.
이 정보는 앱이 종료되어도 유지되며, 앱이 재실행되면 다시 불러올 수 있다.
// Created by Toughie on 2023/05/07.
//
import SwiftUI
struct AppStoragePrac: View {
//옵셔널 스트링
@State var currentUserName: String?
var body: some View {
VStack(spacing: 20) {
//nil coalescing을 활용해 placeHolder처럼
Text(currentUserName ?? "Add Name Here")
// if let name = currentUserName {
// Text(name)
// }
//버튼을 누르면 "Toughie"가 currentName에 할당됨.
Button("SAVE") {
let name = "Toughie"
currentUserName = name
//UserDefaults를 활용해 "name"이라는 키로 name을 저장(여기선 "Toughie")
UserDefaults.standard.set(name, forKey: "name")
}
}
//앱을 껐다가 다시 킬 때 UserDefaults에 저장 되어 있는 데이터를 불러옴
.onAppear {
currentUserName = UserDefaults.standard.string(forKey: "name")
}
}
}
자 그럼 @AppStorage를 활용해보자!
// Created by Toughie on 2023/05/07.
//
import SwiftUI
struct AppStoragePrac: View {
// @State var currentUserName: String?
@AppStorage("name") var currentUserName: String?
var body: some View {
VStack(spacing: 20) {
Text(currentUserName ?? "Add Name Here")
// if let name = currentUserName {
// Text(name)
// }
Button("SAVE") {
let name = "Poppy"
currentUserName = name
}
}
}
}
훨씬 간단하게 같은 기능을 활용할 수 있다 :)
또한 @AppStorage로 선언한 변수는 앱 내 어떤 뷰에서도 접근할 수 있다.
(UserDefaults에 저장되기 때문에, 앱 내 어느 뷰에서든 이 변수를 가져와 사용할 수 있다.)
*다만 권장되지는 않음_ 환경객체 사용이 더 안전하고 뷰 간 종속성도 최소화 할 수 있기 때문.
@AppStorage와 UserDefaults.
@AppStorage는 UserDefaults의 간편한 래퍼(wrapper)이며, 구현 방법은 UserDefaults와 유사하다.
@AppStorage를 사용하면 간단하게 로컬 데이터를 저장하고 검색할 수 있으며, 데이터가 변경될 때마다 자동으로 UI가 업데이트된다.
하지만 @AppStorage는 UserDefaults의 기능을 일부 제한한다.
ex. @AppStorage로 사용자 설정값을 저장하면 앱을 삭제하고 다시 설치하면 이전 설정값이 유지되지 않는다.
이러한 경우에는 UserDefaults를 직접 사용하는 것이 더 적합하다.
또한 @AppStorage는 뷰에서만 사용 가능하므로, 비 UI 관련 데이터를 저장하기에는 적합하지 않을 수 있다.
따라서, 간단하고 빠르게 UI와 관련된 데이터를 저장하고 검색할 때 @AppStorage를 사용할 수 있고,
보다 복잡한 경우에는 UserDefaults를 직접 사용하는 것이 더 적합하다!
'SwiftUI > SwiftUI(Basic)' 카테고리의 다른 글
[54] AsyncImage / @unknown (0) | 2023.05.11 |
---|---|
[53] 온보딩뷰 만들기 (0) | 2023.05.08 |
[51] @EnvironmentObject / 뷰 계층 구조 (0) | 2023.05.07 |
[50] @Publisehd, @StateObject, @ObservedObject / MVVM (0) | 2023.05.07 |
[49] custom Model 커스텀 모델/ Identifiable (0) | 2023.05.03 |