ios - 如何保存实现 Codable 的自定义对象

标签 ios swift swift4

现在使用 Swift 4 可以更轻松地对 JSON or Properties list 进行编码/解码.

但我找不到如何使用 Codable 编码数据,而不使用 Objective-C 方法 initWithCoderencodeWithCoder

考虑这个简单的类:

struct Question: Codable {
    var title: String
    var answer: Int
    var question: Int
}

如何使用 CodingKeys 而不是 initWithCoderencodeWithCoder 将其编码为数据?

编辑: 我还需要能够使用 NSKeyedArchiver 反序列化以前保存在 userdefaults 中的对象。

最佳答案

嗯,你不再需要 NSKeyedArchiver

试试这个:

let questionObj = Question(title: "WWDC, 2017", answer: 1,question:1)
let encoder = JSONEncoder()
if let encoded = try? encoder.encode(questionObj) {
    UserDefaults.standard.set(encoded, forKey: "K_Question")
}
let decoder = JSONDecoder()
if let questionData = UserDefaults.standard.data(forKey: "K_Question"),
    let question = try? decoder.decode(Question.self, from: questionData) {
    print(question.title)
    print(question.answer)
    print(question.question)
}

关于ios - 如何保存实现 Codable 的自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44495842/

相关文章:

ios - 如何在 Swift 4 中解码 JSON(JSON Web token )?

ios - 如何从最后一个 .POST 按日期重新排序 tableview 单元格

ios - 更小的 MapKit 缩放间隔 iPhone

ios - 如何删除 cell.imageView?

ios - SpriteKit,如何从 Adob​​e After Effects 导入动画

ios - swift 3 : Convert amount value into words

swift - 匹配正则表达式的字符串扩展

ios - 如果我买不起Mac,如何开发iOS应用程序?

ios - 如何在 Safari iOS 的 html5 Canvas 中缩放表情符号?

ios - Swift 两个问号可选链接