首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift问题中的JSONModel

Swift问题中的JSONModel
EN

Stack Overflow用户
提问于 2014-09-02 02:51:09
回答 3查看 6.6K关注 0票数 5

我正在尝试使用JSONModel将json映射到Swift中的模型。

如果模型没有作为JSONModel子类的属性,那么一切都会正常工作。

因此在示例中,这是可行的,并且它成功地映射了属性:

代码语言:javascript
复制
class Person: JSONModel {

    var name: NSString?
    var gender: NSString?

}

但是如果我放入JSONModel子类City,这个属性没有初始化,当我稍后尝试访问city属性时,它会使应用程序崩溃(我可以成功访问person.name和person.gender,但在person.city上它会崩溃,没有任何信息):

代码语言:javascript
复制
class Person: JSONModel {

    var name: NSString?
    var gender: NSString?
    var city: City? // City is JSONModel subclass
}

如果属性是JSONModel子类,则看起来JSONModel不能映射/解析属性。有没有人经历过这种情况并解决了它?

EN

回答 3

Stack Overflow用户

发布于 2015-07-06 23:35:22

JSONModel 无法在Swift中工作,这就是您遇到问题的原因。从JSONModel readme

NB: Swift在幕后的工作方式与Objective-C不同。因此,我找不到在中重新创建JSONModel的方法。Objective-C中的JSONModel通过CocoaPods或作为导入的Objective-C库在Swift应用程序中工作。

你也许能够让它在某些边缘情况下工作-但使用它的唯一可靠的方法是编写针对它的Objective C代码,并使用这些Objective C类。如果你想做纯Swift,你应该看看其他的库,比如Argo和很多其他的库。

票数 7
EN

Stack Overflow用户

发布于 2015-11-23 17:12:35

实际上,Swift中JSONModel的问题如下:

它使用Objc-runtime来理解每个属性是什么类型,一旦你声明了一个Obj-c运行时不知道如何映射的类型,那么如果你知道你有一个数值字段,JSONModel只能将它映射为一个字符串.........or NSNumber。

它的工作方式:因此,基本上,如果您将所有在本例中保留为空的属性声明为String,您将开始看到值。如果将数值字段声明为NSNumber,也是如此。对于JSONModel来说,String和NSNumber都可以被声明为可选的,没有特别的问题。

但是你敢不敢不使用Swift中带有可选声明(Int?,Double?,Bool?)的原始类型。这是行不通的。

有效的方法是通过以下方式避免将其声明为optionals:

1) var tmpInt : Int = 0,默认值

2) var tmpInt : Int!,强制

当然,这些最后的“变通办法”完全违背了为什么Swift出现在这个世界上,但这就是你如何将旧的Objective-C习惯带到新的现代Swift (;

票数 1
EN

Stack Overflow用户

发布于 2014-09-05 16:11:45

也许将访问级别设置为"public“可能会有所帮助?

代码语言:javascript
复制
public class Person: JSONModel {
    public var name: NSString?
    public var gender: NSString?
    public var city: City? // City is JSONModel subclass
}

public class City: JSONModel {
    public var name: NSString?
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25611500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档