在 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 中用数组序列化我自己的对象的更优雅的方法是啥的主要内容,如果未能解决你的问题,请参考以下文章