UserDefaults

https://developer.apple.com/documentation/foundation/userdefaults#1664798

 

Apple Developer Documentation

 

developer.apple.com

UserDefaults

An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.
유저디폴트, 사용자 기본값이라고 생각하면 된다. 키-값 형태로 저장되며 키는 문자열형태, 값은 스위프트의 기본자료형인 Float, Double, Int, Bool, URL 타입 이외에 NSData,NSString,NSNumber,NSDate,NSArray,,NSDictionary 자료형을 담아낼 수 있다고한다.
설명만 들었을때는 이걸 어떻게 사용하는건가 싶었는데, Zedd님의 글을 보고서 금방 이해했다. 앱의 최근 상태를 저장하거나 최근 값을 불러내기 위해 사용된다고 보면된다. 
 

iOS ) 왕초보를 위한 User Defaults사용해보기(switch)

안녕하세요 :) 오늘은 UserDefaults에 대해서 배워볼게요!!UserDefaults가 무엇이냐!! 간단하게 말해서 "데이터 저장소"라고 생각하시면 된답니다.UserDefaults를 사용하면 앱의 어느 곳에서나 데이터를 쉽

zeddios.tistory.com

저장

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/

 

Apple Developer Documentation

 

developer.apple.com

 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 부분을 완벽하게 이해하기 위해서는 나중에 더 많은 시간을 들여 공부해야겠다.

 

Core Data (1)

안녕하세요 :) Zedd입니다. Core Data를 사용할 일이 생겼는데...제가 옜날에 해봤단 말이죠..!?!?!? 근데 다시 하려니까 생각이 하나도 안나는거에요 그때는 문서 볼 생각도 안했었는데..ㅎㅎㅎㅎ 이

zeddios.tistory.com

 

 

Core Data (2)

안녕하세요 :) Zedd입니다. https://zeddios.tistory.com/987 Core Data (1) 안녕하세요 :) Zedd입니다. Core Data를 사용할 일이 생겼는데...제가 옜날에 해봤단 말이죠..!?!?!? 근데 다시 하려니까 생각이 하나도 안

zeddios.tistory.com

 

+ Recent posts