UserDefaults +@@

신동준·2022년 6월 11일
0
post-thumbnail

이전에 했던 UserDefaults를 통한 Object 저장방식을 더쉽게 하는방법을 찾았다

UserDefaults.standard의경우 plist 자체가 이미 dictionary구현이 되있기때문에 object변수가 저장되는경우 error발생해서 컴파일이 되지않는다 그래서 JSONData변환한후에 저장을헀는데 JSONData쓸필요도 없이 plist파일을 dictionary로 제한하지않게 저장할수있는 방식이 존재한다..

class CustomObject: Codable {
    var name: String = ""
    var age:Int = 0
    var balance:Double = 0.0
    var playBasketball:Bool = false
    var birthDate:Date = Date()
}

// UserDefault.standard 다른 경로로 plist생성
let dataFilePath = FileManager.default.urls(for:.documentDirectory,in: .userDomainMask).first?.appendingPathComponent("CustomObject.plist")

// CustomObject Array 및 인스턴스생성

var customObjectArray = [CustomObject]()

let customObject = CustomObject()
let customObject2 = CustomObject()
customObject2.name = "Ailey"
customObject2.age = 23
customObject2.balance = 2342.243
customObject2.playBasketball = false
customObject2.birthDate = Date.now
let customObject3 = CustomObject()
customObject3.name = "Harry"
customObject3.age = 26
customObject3.balance = 1553.435
customObject3.playBasketball = true
customObject3.birthDate = Date.init(timeInterval: 3600*24, since: customObject2.birthDate)
customObjectArray.append(customObject)
customObjectArray.append(customObject2)
customObjectArray.append(customObject3)

// CustomObject 저장하기(Encode)
let encoder = PropertyListEncoder()

do {
    let data = try encoder.encode(customObjectArray)
    try data.write(to:dataFilePath!)
} catch {
    print("\(error)")
}


// 데이터파일 경로 확인 "CustomObject.plist" 파일이 생성된것을 확인할수있다
print(dataFilePath)


// CustomObject 불러오기(Decode)

var loadedArray:[CustomObject] = []
if let data = try? Data(contentsOf: dataFilePath!) {
    let decoder = PropertyListDecoder()
    do {
        loadedArray = try decoder.decode([CustomObject].self, from: data)
    } catch {
        print("\(error)")
    }
}

print(loadedArray[0].name)
print(loadedArray[0].age)
print(loadedArray[1].balance)
print(loadedArray[1].playBasketball)
print(loadedArray[1].birthDate)
print(loadedArray[2].birthDate)
print(loadedArray[2].name)
print(loadedArray[2].age)


plist형식의 CustomObject가 잘형성된것을 확인할수있다..

profile
Swift 예비개발자

0개의 댓글