let defaults = UserDefaults.standarddefaults.set("value", forKey: "key")let data1 = defaults.object(forKey: "key) as! String
let data2 = defaults.string(forKey: "key")
--> UserDefaults는 Base 64 인코딩 형식의 Data형을 따르기 때문에 저장할 수 있는 데이터는 Base 64 인코딩 형식을 거쳐야 한다(* Base 64 인코딩: Binary Data를 Character set에 영향을 받지 않는 공통 ASCII 영역의 문자로만 이루어진 문자열로 바꾸는 인코딩).
기본 데이터 타입은 내부적으로 해당 인코딩 형식이 적용되지만, class나 struct 같은 사용자 정의 타입은 직접 변환해서 저장해야 한다.
JSONEncoder/Decoder 사용하기
1) struct에 Codable 채택
struct Todo: Codable { }
2) 데이터를 넣고 JSONEncoder를 사용하여 데이터를 저장
var todos = [Todo]()
let encoder = JSONEncoder()
if let encodeData = try? encoder.encode(todos) {
UserDefaults.standard.set(encodeData, forKey: "todos")
}
3) 데이터를 불러올 땐 JSONDecoder를 사용
if let readData = UserDefaults.standard.data(forKey: "todos"),
let decodeData = try? JSONDecoder().decode([Todo].self, from: readData) {
todos = decodeData
}