当收到字典[String: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","金额":0]或[" id": " 1","金额":4]或[" id":" 1","金额":4.50 ]
从XCode 8.1开始,我的模型现在返回nil,我看不出原因。 8.1改变了铸造或什么?
答案 0 :(得分:1)
更改我的'如果让'的工作原理。
var amount:Double
Xcode 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
}
答案 1 :(得分:0)
您的班级init
方法在这种情况下无法正常工作,因为有些属性可能因为在您的工作中无法解开而无法初始化if let
陈述。
所以你必须为这些属性设置一些默认值:
var id: String = ""
var amount: Float = 0
另一种方法是为展开添加一个else案例:
if let amount = json["amount"] as? Float {
self.amount = amount
} else {
amount = 0
}
这与我们之前设置的默认设置基本相同,因此将其作为上述第一种方式保留更为明确。
或者,更简单的是,如果您不想要特定属性的默认设置,则必须将其设为可选项,例如
var id: String?