[Swift] UserDefaults 사용하기

Charlie·2022년 7월 12일
0
post-thumbnail

UserDefaults

UserDefault plist 파일 경로

print(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).last! as String)

UserDefaults는 DB처럼 사용해서는 안된다. UserDefaults의 plist를 전부 읽은 이후에 동기적으로 사용할 수 있으므로 크기가 큰 데이터를 UserDefaults에 넣으면 안된다.

import Foundation

let defaults = UserDefaults.standard

defaults.set(24.0, forKey: "musicVolume")
defaults.set(true, forKey: "musicOn")
defaults.set([1, 2, 3], forKey: "myArray")
defaults.set(["first": 1, "second": 2, "third": 3], forKey: "myDictionary")

let volume = defaults.double(forKey: "musicVolume")
let isOn = defaults.bool(forKey: "musicOn")
let myArray = defaults.array(forKey: "myArray")
let myDictionary = defaults.dictionary(forKey: "myDictionary")

UserDefaults는 singleton으로 관리된다.
UserDefaults를 사용하면 기본 자료형의 딕셔너리만 사용할 수 있다.

Custom plist

Custom plist 사용

let dataFilePath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first?.appendingPathComponent("Items.plist")
func saveItems() {
        let encoder = PropertyListEncoder()
        do {
            let data = try encoder.encode(itemsArray)
            try data.write(to: dataFilePath!)
        } catch {
            print("Error encoding items : \(error)")
        }
        tableView.reloadData()
    }
func loadItems() {
        if let data = try? Data(contentsOf: dataFilePath!) {
            let decoder = PropertyListDecoder()
            do {
                itemsArray = try decoder.decode([Item].self, from: data)
            } catch {
                print("Error decoding items : \(error)")
            }
        }
        tableView.reloadData()
    }
profile
Hello

0개의 댓글