我正在尝试创建与Swift中检索的JSON数据相对应的类。对于嵌套对象,是否适合通过结构而不是单独的类来表示它们?或者这些只是被视为字典对象?所以例如下面是一些JSON:
{
prop1: value1,
prop2: {
subprop1: subvalue1,
subprop2: subvalue2
}
}
在Swift类中表示嵌套prop2
对象的最佳方法是什么?我目前正在使用结构如下:
class MyClass {
struct prop2 {
var subprop1: AnyObject?
var subprop2: AnyObject?
}
var prop1: AnyObject?
}
这种方法有点麻烦,但是,如果有深层嵌套的对象,那么不确定如何最好地处理这些情况。
我还要补充说,将数据序列化为NSDictonary对象没有问题,如下所示:
if let details: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as? NSDictionary { }
但是,我试图更进一步,将字典的属性映射到Swift中各自的类变量/结构。
答案 0 :(得分:0)
将JSON中的本机NSDictionary对象传递到NSJSONSerialization class非常简单,如果在一个格式良好的NSDictionary对象中设置JSON表示,则可以反过来(即,您可以通过`dataWithJSONObject:options:error: API从NSDictonary对象创建JSON数据流。
公共文档适用于Objective-C,但如果您登录Apple的Developer Portal,您也可以查找预发布的Swift文档。
答案 1 :(得分:0)
我从this article获取灵感,创建了一个自定义JSON反序列化框架。
接下来,我要创建一个这样的界面:
protocol JsonDeserializable {
typealias T
class func deserialize(json: NSDictionary) -> T
}
和类或结构的层次结构,避免嵌套结构,以使它们可重用:
struct MyStruct1 : JsonDeserializable {
var prop1: Type1
var prop2: MyStruct2
static func deserialize(json: NSDictionary) -> MyStruct1 {
...
}
}
struct MyStruct2 : JsonDeserializable {
var subprop1: Subtype1
var subprop2: Subtype2
static func deserialize(json: NSDictionary) -> MyStruct2 {
...
}
}