swift4에서 사용자 정의 객체를 NSUserDefaults에 저장하고 읽습니다.
환경
Xcode Version 10.0 (10A255)
Apple Swift version 4.2
소개
이런 커스텀 클래스가 있었다고 해서, 이것을
NSUserDefaults
에 보존할 수 있도록(듯이) 합니다.Task.swift
import Foundation
class Task: NSObject {
let text: String
let deadline: Date
init(text: String, deadline: Date) {
self.text = text
self.deadline = deadline
}
init(from dictionary: [String: Any]) {
self.text = dictionary["text"] as! String
self.deadline = dictionary["deadline"] as! Date
}
}
구현
맞춤 클래스 수정
NSCoding
프로토콜을 준수하도록 메서드를 추가합니다.Task.swift
import Foundation
class Task: NSObject, NSCoding {
let text: String
let deadline: Date
init(text: String, deadline: Date) {
self.text = text
self.deadline = deadline
}
init(from dictionary: [String: Any]) {
self.text = dictionary["text"] as! String
self.deadline = dictionary["deadline"] as! Date
}
func encode(with aCoder: NSCoder) {
aCoder.encode(text, forKey: "text")
aCoder.encode(deadline, forKey: "deadline")
}
required init?(coder aDecoder: NSCoder) {
text = aDecoder.decodeObject(forKey: "text") as! String
deadline = aDecoder.decodeObject(forKey: "deadline") as! Date
}
}
NSUserDefaults에서 로드
var tasks: [Task]!
let userDefaults = UserDefaults.standard
let taskData = userDefaults.object(forKey: "tasks") as? Data
guard let t = taskData else { return }
let unArchiveData = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(t)
tasks = unArchiveData as? [Task] ?? [Task]()
NSUserDefaults에 저장
let encodedTask = try? NSKeyedArchiver.archivedData(withRootObject: tasks, requiringSecureCoding: false)
let userDefaults = UserDefaults.standard
userDefaults.set(encodedTask, forKey: "tasks")
userDefaults.synchronize()
이상
다음은
NSSecureCoding
의 패턴을 구현하고 기사에 정리하려고합니다
Reference
이 문제에 관하여(swift4에서 사용자 정의 객체를 NSUserDefaults에 저장하고 읽습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/paranishian/items/71d9b3784e3fd897e625텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)