簡體   English   中英

更新到Xcode 8.1:無法再將AnyObject類型的JSON數據轉換為預期的類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM