ios - 如何将快速结构保存到文件

标签 ios swift serialization struct

我想为我的应用程序的(非常简单的)模型使用结构。

但是 NSKeyedArchiver 只接受对象(扩展 NSObjects)。

有什么好的方法可以将结构保存到文件中吗?

最佳答案

我有时使用的一种非常简单的方法。你需要写的代码量不超过class/NSCoding场景。

首先导入伟大的SwiftyJSON图书馆。

让我们从一个简单的结构开始

struct Starship {
    let name: String
    let warpSpeed: Bool
    let captain: String?

    init(name: String, warpSpeed: Bool, captain: String? = nil) {
        self.name = name
        self.warpSpeed = warpSpeed
        self.captain = captain
    }
}

让它可以转换为 JSON 或从 JSON 转换

struct Starship {
    let name: String
    let warpSpeed: Bool
    let captain: String?

    init(name: String, warpSpeed: Bool, captain: String? = nil) {
        self.name = name
        self.warpSpeed = warpSpeed
        self.captain = captain
    }

    init?(json: JSON) {
        guard let
            name = json["name"].string,
            warpSpeed = json["warpSpeed"].bool
        else { return nil }
        self.name = name
        self.warpSpeed = warpSpeed
        self.captain = json["captain"].string
    }

    var asJSON: JSON {
        var json: JSON = [:]
        json["name"].string = name
        json["warpSpeed"].bool = warpSpeed
        json["captain"].string = captain
        return json
    }
}

就是这样。让我们使用它

let enterprise = Starship(name: "Enteriprise D", warpSpeed: true, captain: "JeanLuc Picard")

let json = enterprise.asJSON
let data = try! json.rawData()

// save data to file and reload it

let newJson = JSON(data: data)
let ship = Starship(json: newJson)
ship?.name // "Enterprise D"

关于ios - 如何将快速结构保存到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37756121/

相关文章:

ios - 比较 NSString 与 NSString * const(在 iOS8.1 上)失败

python - 是否有用于 Python 包装器的 Protocol Buffers 允许在 Python 代码而不是 proto 文件中进行对象注释?

.net - VB.Net 序列化和反序列化私有(private)成员 - 简单示例

android - 在 Android 中读取序列化文件时出现 EOFException

ios - Xcode 9 iOS 模拟器在安装 Xcode 10 beta 后变成黑屏

ios - 有谁知道如何让 UIScrollView 中带有信息的标签位于框的顶部而不是中间?

ios - 在 iPhone 中没有推文表的情况下通过应用程序发送推文

swift - Xcode 10 Struct Initializer autoComplete 不显示

swift - 这个 RealityKit 的东西是构思不好还是我遗漏了什么?

ios - Swift DateComponentsFormatter 删除前导零但在分钟位置至少保留一位数字