애플에서 제공해주는 간단한 String Key-Value 형태의 저장소. 내부적으로 DB 사용
저장되는 값 들을 Preferences라고 부름
//키로 String 사용
let stringKeyForUserDefault = "stringKey"
let immuatablestringKeyForUserDefault = "immutablestringKey"
let floatKeyForUserDefault = "floatKey"
//저장
UserDefaults.standard.set("졸려유", forKey: stringKeyForUserDefault)
UserDefaults.standard.set(4.5, forKey: floatKeyForUserDefault)
UserDefaults.stanard.set(NSMutableString(string: "Immutable"), forKey: immutablestringKeyForUserDefault)
//꺼내오기
print(UserDefaults.standard.string(forKey: stringKeyForUserDefault)
print(UserDefaults.standard.float(forKey: floatKeyForUserDefault))
print(UserDefaults.standard.string(forKey: immuatablestringKeyForUserDefault))
커스텀 클래스의 객체를 저장하려면 NSKeyedAchiever를 이용해 Data(NSData)형식으로 변환해서 저장
1. 저장할 클래스를 NSObject의 하위클래스로, NSCoding 프로토콜을 준수하게 변경
class Person : NSObject ,NSCoding {
var name : String
var age : Int
init(name aName :String, age aAge : Int) {
self.name = aName
self.age = aAge
}
//NSCoding Protocol 구현
required init?(coder: NSCoder) {
self.name = coder.decodeObject(forKey: "name") as! String
self.age = coder.decodeInteger(forKey: "age")
}
func encode(with coder: NSCoder) {
coder.encode(self.name, forKey: "name")
coder.encode(self.age, forKey: "age")
}
}
do {
//Data로 클래스를 변경합니다.
//secureCoding을 true로 하려면, 클래스가 NSSecureCoding을 따라야 합니다.
let mePropertyListData = try NSKeyedArchiver.archivedData(withRootObject: me, requiringSecureCoding: false)
//저장합니다
UserDefaults.standard.set(mePropertyListData, forKey: "me")
} catch {
print(error)
}
let achievedData = UserDefaults.standard.object(forKey: objectKey)
do {
let person = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(achievedData as! Data) as! Person
print(person.name)
print(person.age)
} catch {
print(error)
}
let standard = UserDefaults.standard
print(standard.dictionaryRepresentation())
참조>
lemon_dev