![](/img/trans.png)
[英]Cannot convert value of type 'AnyObject?' to expected argument type '[AnyObject]!
[英]Update to Xcode 8.1: Can no longer convert JSON data of type AnyObject to expected Type
當收到字典[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是否改變了鑄造方式?
更改我的“如果允許”效果。
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
}
在這種情況下,您的類的init
方法將不起作用,因為有可能由於在if let
語句中無法進行解包而無法初始化其某些屬性。
因此,您必須為這些屬性設置一些默認值:
var id: String = ""
var amount: Float = 0
另一種方法是為展開添加其他情況:
if let amount = json["amount"] as? Float {
self.amount = amount
} else {
amount = 0
}
基本上與我們之前設置默認值相同,因此將其保留為上述第一種方法會更加清楚。
或者,更容易地,如果您不想為特定屬性設置默認值,則必須將其設為可選屬性,例如
var id: String?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.