2023. 10. 31. 01:23ㆍ코딩일기/iOS
앱을 다시 시작해도 유지되어야 하는 소량의 데이터가 있다. 이것은 앱이 저장을 하고 있어야 가능하다.
SwiftUI는 소량의 데이터를 지속적으로 저장을 하기 위한 두 개의 프로퍼티 래퍼가 있다.
@SceneStorage 와 @AppStorage 가 있다.
@SceneStorage 즉, 화면 저장소는 앱 내의 각 화면마다 데이터의 복사본을 갖는다. 앱 내의 다른 화면에서도 그 데이터에는 접근이 불가능하다.
반면 @AppStorage, 앱 저장소는 앱 전체에서 접근이 가능한 데이터를 저장한다. UserDefaults를 기반으로 구축되었다.
UserDefaults는 소량의 데이터를 키-값 쌍(key-values)으로 저장하는 데 사용한다.
@SceneStorage 와 @AppStorage 둘 다 Bool, Int, Double, String, URL 및 데이터 타입에 대한 저장을 지원한다.
UserDefaults에 관한 자세한 정보는 이곳을 참고!
UserDefaults | Apple Developer Documentation
An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.
developer.apple.com
공식문서를 읽다보니 이목을 끄는 단어가 있었다. preference!! (not null이라는 뜻은 아니고 강조ㅎㅎ)
안드로이드에서도 key-values 로 간단한 데이터를 저장하는 SharedPreferences 라는 API가 있다. iOS의 @SceneStorage, @AppStorage 와의 비교는 아래에서 조금 더 자세히 해보도록 하자.
@SceneStorage 와 @AppStorage 의 사용법은 간단하다!
이전에 상태 프로퍼티(@State) 를 사용해본 경험이 있다면, 다음과 같은 코드를 본 적이 있을 것이다.
struct AppStorageView: View {
@State var editorText: String = "Sample Text"
var body: some View {
TextEditor(text: $editorText)
.padding(30)
.font(.largeTitle)
}
}
@State 대신 @SceneStorage 와 @AppStorage 를 쓰고 파라미터로 원하는 키값을 전해주면 된다.
import SwiftUI
struct SceneStorageView: View {
@SceneStorage("mytext") private var editorText: String = ""
var body: some View {
TextEditor(text: $editorText)
.padding(30)
.font(.largeTitle)
}
}
import SwiftUI
struct AppStorageView: View {
@AppStorage("mytext") var editorText: String = "Sample Text"
var body: some View {
TextEditor(text: $editorText)
.padding(30)
.font(.largeTitle)
}
}
@SceneStorage 와 @AppStorage 를 cmd 클릭해서 따라가 보면 다음과 같은 설명들을 찾아 볼 수 있다.
SceneStorage
Parameter key: a key used to save and restore the value.
AppStorage
- Parameters:
- key: The key to read and write the value to in the user defaults store.
다음은 안드로이드의 SharedPreferences에 대한 간단한 소개다.
SharedPreferences로 단순 데이터 저장하기 | Android 개발자 | Android Developers
DataStore는 로컬 데이터를 저장하는 최신 방법을 제공합니다. SharedPreferences 대신 DataStore를 사용해야 합니다. 자세한 내용은 DataStore 가이드를 참고하세요. SharedPreferences로 단순 데이터 저장하기 컬
developer.android.com
val sharedPref = activity?.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE)
위 공식문서에는 이렇게 나와있다.
키값을 앱 고유의 ID로 설정할 것을 권장한다. (예: com.example.myapp.PREFERENCE_FILE_KEY)
파라미터로 키값을 이용하여 간단한 데이터를 저장하는 것이 iOS에서의 방법과 매우 유사하다.
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
putInt(getString(R.string.saved_high_score_key), newHighScore)
apply()
}
위의 방법들을 활용하여 앱에서 간단한 정보들, 예를 들면 자동로그인 여부와 같은 값을 저장하여 활용하면 유용하다고 생각된다.
이번에 정리를 하며 거의 처음으로 공식문서를 읽어보았다. 그리고 또 거의 처음으로 영어로 읽어보았다. 익숙하지 않고 빨리 읽지 못한다는 이유로 영어로 읽는 것을 피해왔는데, 저번 멘토링에서 영어로 공식문서를 참고하는 모습을 보며 나도 도전해보기를 마음먹고 실천해봤다.
영어도 좋아하고, 나름 토익 800+ 면서 그동안 왜 겁만 먹었을까. 정리도 열심히하고 공식문서를 영어로 읽는 것에도 익숙해져야겠다~~
'코딩일기 > iOS' 카테고리의 다른 글
iOS - 협업시 .xcconfig 파일 .gitignore 설정 (0) | 2024.03.28 |
---|---|
iOS - 파이어베이스 CRUD 오류 (feat. 오타) (0) | 2024.02.18 |
iOS - SwiftUI Alert 오류! 이상한 Alert가 뜬다. (0) | 2024.02.05 |
ios - SwiftUI에서 NaverMap Api 사용법 (2) | 2024.01.04 |
SwiftUI Image .cornerRadius(100) 이미지 둥글게 (0) | 2023.10.16 |