我正在尝试使用JSONModel将json映射到Swift中的模型。
如果模型没有作为JSONModel子类的属性,那么一切都会正常工作。
因此在示例中,这是可行的,并且它成功地映射了属性:
class Person: JSONModel {
var name: NSString?
var gender: NSString?
}但是如果我放入JSONModel子类City,这个属性没有初始化,当我稍后尝试访问city属性时,它会使应用程序崩溃(我可以成功访问person.name和person.gender,但在person.city上它会崩溃,没有任何信息):
class Person: JSONModel {
var name: NSString?
var gender: NSString?
var city: City? // City is JSONModel subclass
}如果属性是JSONModel子类,则看起来JSONModel不能映射/解析属性。有没有人经历过这种情况并解决了它?
发布于 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和很多其他的库。
发布于 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 (;
发布于 2014-09-05 16:11:45
也许将访问级别设置为"public“可能会有所帮助?
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?
}https://stackoverflow.com/questions/25611500
复制相似问题