首页 > 解决方案 > 我的应用程序关闭后如何保存结构?

问题描述

我知道有很多方法可以在应用程序关闭后保存数据 - NSCoding、CoreData 和 NSKeyedArchiver 仅举几例 - 但它们都不支持存储自定义结构(对吗?)有什么方法可以存储类似的结构这进入记忆?我想存储items变量(如果必须的话,还有 myStruct)。

struct myStruct {
    var text: String
    var isDone: Bool
}

var items = [Int: [myStruct]]()

一如既往地感谢任何帮助!再次感谢!

标签: iosswiftstruct

解决方案


使用 Codable 归档

您可以使用Codable协议并NSKeyedArchiver执行此操作。

使您struct符合Codable协议。struct如果所有的属性也符合,则您不必做任何额外的事情,这对于像,Codable等基本类型是正确的,如果它们自己的属性属于这些基本类型,则 String struct enum`s 将是可编码的。IntDoubleand others. Even nesteds and

请注意,如果您使用的其他自定义类型不是从Codable符合标准的类继承的,则需要为该类型添加自己的编码键,以便以这种方式归档它们。

只需在声明中添加协议:

struct myStruct: Codable {
    var text: String
    var isDone: Bool
}

var items = [Int: [myStruct]]()

然后,您可以像这样保存项目:

do {
    let myData: Data = try NSKeyedArchiver.archivedData(withRootObject: items, requiringSecureCoding: false)
    try myData.write(to: fileURL)
} catch {
    // Error handling
}

这里fileURL应该是文件系统中某个位置的 URL。

您可以像这样加载项目:

do {
    let myData = try Data(contentsOf: fileURL)
    if let items = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(myData) as? [Int : [myStruct]] {
        // Use the data here
    }
} catch {
    // Error handling
}

推荐阅读