在 Swift 中用数组序列化我自己的对象的更优雅的方法是啥

Posted

技术标签:

【中文标题】在 Swift 中用数组序列化我自己的对象的更优雅的方法是啥【英文标题】:What is the more elegant way to serialize my own objects with arrays in Swift在 Swift 中用数组序列化我自己的对象的更优雅的方法是什么 【发布时间】:2014-12-01 14:44:17 【问题描述】:

我有一个如下所示的类:

class Foo 
    var bar = Int()


class Bar 
    var baz = String()
    var arr = [Foo]()

我有一个 Bar 结构的对象,需要序列化为 JSON:

let instance = Bar()

通过标准库或一些第三方库更优雅的方式是什么?

提前致谢。

【问题讨论】:

【参考方案1】:

我建议采用这种方法:

class Foo 
    var bar = Int()


class Bar 
    var baz = String()
    var arr = [Foo]()

    var jsonDictionary: NSDictionary 
        return [
            "baz" : self.baz,
            "arr" : self.arr.map $0.bar 
        ]
    


let bar = Bar()
bar.baz = "some baz"
bar.arr.append(Foo())

var error: NSError?
let data = NSJSONSerialization.dataWithJSONObject(bar.jsonDictionary, options: nil, error: &error)

if error == nil && data != nil 
    // success

【讨论】:

如果我们再次取出数据,它是否是一个新对象,没有引用任何序列化的对象?谢谢。 如果我在Foo 结构中还有一个属性怎么办?那我应该在map 参数中写什么? @Unheilig dataWithJSONObject 以 UTF8 JSON 字符串字节返回数据。所以当然你需要创建新对象来反序列化它。 @FrozenHeart 你需要把它映射到字典。 self.arr.map ["bar" : $0.bar, "someOtherValue" : $0.someOtherValue]

以上是关于在 Swift 中用数组序列化我自己的对象的更优雅的方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

从逗号 sep 属性列表创建数组的更优雅的解决方案?

Swift - 序列化包含对象数组的对象并使用 alamofire 发送

在 Angular 应用程序中处理过滤值的更优雅的方式

将 swift 数组转换为对象以进行 json 序列化

从多个源和不同模式序列化对象的更顺畅方法?

在 Swift 3.1 中将自己的对象数组添加到 UserDefaults 时出错