当接收到字典字符串:AnyObject时,我的解析现在会因为一些琐碎的东西而失败。当我能够转换的时候,例如:
模型很简单:
class Invoice:NSObject {
var id:String
var amount:Float
init?(json: [String:AnyObject]) {
if let id = json["id"] as? String {
self.id = id
}
if let amount = json["amount"] as? Float {
self.amount = amount
}
}
}例如:"id":"1","amount":0或"id":"1","amount":4或"id":"1","amount":4.50
从XCode 8.1开始,我的模型现在返回nil,我不明白为什么。是不是8.1改变了投射或者别的什么?
发布于 2016-11-14 18:20:55
更改我的'if let‘是否起作用。
var amount:DoubleXcode 8.0
if let amount = json["amount"] as? Float {
self.amount = amount
}Xcode 8.1
if let amount = json["amount"] as? NSNumber {
self.amount = amount.doubleValue
}发布于 2016-11-10 01:17:08
在这种情况下,类的init方法将无法工作,因为由于if let语句中的展开不起作用,类的一些属性可能不会被初始化。
因此,您必须为这些属性设置一些默认值:
var id: String = ""
var amount: Float = 0另一种方法是为展开添加一个else case:
if let amount = json["amount"] as? Float {
self.amount = amount
} else {
amount = 0
}这基本上与我们之前所做的设置默认值相同,因此将其保留为上面描述的第一种方法会更清楚。
或者,更简单的是,如果你不想为一个特定的属性设置默认值,你必须将其设置为可选的,例如
var id: String?https://stackoverflow.com/questions/40511703
复制相似问题