UserDefaults
https://developer.apple.com/documentation/foundation/userdefaults#1664798
UserDefaults
An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.
저장
func set(Any?, forKey: String)
func set(Float, forKey: String)
func set(Double, forKey: String)
func set(Int, forKey: String)
func set(Bool, forKey: String)
func set(URL?, forKey: String)
매개변수의 자료형에 따라 set메소드를 사용해 키-값 형태로 저장이 된다.
불러오기
func object(forKey: String) -> Any?
func url(forKey: String) -> URL?
func array(forKey: String) -> [Any]?
func dictionary(forKey: String) -> [String : Any]?
func string(forKey: String) -> String?
func stringArray(forKey: String) -> [String]?
func data(forKey: String) -> Data?
func bool(forKey: String) -> Bool
func integer(forKey: String) -> Int
func float(forKey: String) -> Float
func double(forKey: String) -> Double
func dictionaryRepresentation() -> [String : Any]
이후 불러올 키와 함께 자료형에 맞는 함수에 적으면 된다.
간단하게 NavigationView를 만들어서 확인해보았다. 좌측이 UserDefaults를 사용하지 않은 경우, 뷰가 생성될 때마다 초기값으로 시작하는 것을 볼 수 있는 반면, UserDefaults를 사용하게 되면 값들을 따로 저장하고 불러오는 것이 가능해진다. 저장된 자료들은 앱을 껐다 켜도 그대로 남아있는 모습을 볼 수 있었다.
NextView의 onAppear, onDisappear 구현을 통해 UserDefaults를 저장하고 불러오는 동작을 구현하였다.
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
VStack{
NavigationLink(destination: NextView(), label: {
Text("NextView!")
})
}.navigationTitle("Test")
}
.padding()
}
}
struct NextView: View {
@State private var toggleIsOn = false
@State private var count = 0
var body: some View {
VStack{
Toggle("Toggle switch", isOn: $toggleIsOn)
HStack{
Button("-", action: {
count -= 1
})
Text("\(count)")
Button("+", action: {
count += 1
})
}.font(.system(size: 50))
}
.padding()
.onAppear{
count = UserDefaults.standard.integer(forKey: "countKey")
toggleIsOn = UserDefaults.standard.bool(forKey: "toggleKey")
}
.onDisappear{
UserDefaults.standard.set(count, forKey: "countKey")
UserDefaults.standard.set(toggleIsOn, forKey: "toggleKey")
}
}
}
CoreData
https://developer.apple.com/documentation/coredata/
Core Data
Persist or cache data on a single device, or sync data to multiple devices with CloudKit.
UserDefaults의 경우는 간단한 유저 설정을 저장하는 데에 용이하지만, 더 복잡한 사용자 자료를 담아내려면 Coredata가 적합하다.
coredata에는 많은 기능들이 있지만 대다수가 Persistence 기능을 위해 사용하는 것으로 알고 있다.
Persistence
Core Data abstracts the details of mapping your objects to a store, making it easy to save data from Swift and Objective-C without administering a database directly.
문서에 따르면 데이터베이스를 직접 사용하지 않고 swift, obj-c 자료들을 손쉽게 저장할 수 있다고 한다. zedd님의 설명을 읽어보니 대략적인 느낌은 알겠으나 아직 본인의 역량이 부족한지 완벽하게 이해가 되지 않는다. coredata 부분을 완벽하게 이해하기 위해서는 나중에 더 많은 시간을 들여 공부해야겠다.
'iOS > Study' 카테고리의 다른 글
[iOS] App thinning에 대해서 설명하시오. (0) | 2022.12.06 |
---|---|
[iOS] 앱 화면의 콘텐츠를 표시하는 로직과 관리를 담당하는 객체를 무엇이라고 하는가? (2) | 2022.11.30 |
[iOS] 실제 디바이스가 없을 경우 개발 환경에서 할 수 있는 것과 없는 것을 설명하시오. (0) | 2022.11.24 |
[iOS] Bounds 와 Frame 의 차이점을 설명하시오. (0) | 2022.11.21 |
[시작글] iOS 관련 지식 (0) | 2022.11.21 |