jsonParsing
을 하는데 자주 사용된다.1) Codable 채택하는 구조체 생성
//Codable은 기본 구현된 생성자가 있으므로 멤버 구현 생략 가능
struct Language: Codable {
let name: String
let version: Double
let logo: Data
}
2) encode구현
NSKeyedArchiver
사용finishEncoding
호출 필수class ViewController: UIViewController {
...
func encodeObject() {
do {
guard let img = UIImage(named: "swift")?.pngData() else { return }
let obj = Language(name: "Swift", version: 5.9, logo: img)
let archiver = NSKeyedArchiver(requiringSecureCoding: true)
try archiver.encodeEncodable(obj, forKey: NSKeyedArchiveRootObjectKey) // NSKeyedArchiver에 저장되며, encodedData
try archiver.encodedData.write(to: fileUrl, options:.atomic)
//중요. 인스턴스 멤버를 이용해서 인코딩 시 필수
//모든 작업 끝낸 뒤
archiver.finishEncoding()
} catch {
print(error)
}
}
...
}
3) decode 구현
NSKeyedUnarchiver
사용finishDecoding
호출 필수class ViewController: UIViewController {
...
func decodeObject() {
do {
let data = try Data(contentsOf: fileUrl)
let unarchiver = try NSKeyedUnarchiver(forReadingFrom: data)
unarchiver.requresSecureCoding = true
if let language = unarchiver.decodeDecodable( Language.self, forKey: NSKeyedRootObjectKey) {
logoImageView.image = UIImage(data: language.logo)
nameLabel.text = language.name
versionLable.text = "\(language.version)"
unarchiver.finishDecoding()
}
} catch {
print(error)
}
}
}