簡體   English   中英

如何將Swift中的Dictionary轉換為相關類型?

[英]How to cast Dictionary in Swift to related type?

這就是我要對字典進行的操作:

    if let deliveries = dictionary["deliveries"] as? NSDictionary {

        var castedDeliveries = [Double: Double]()

        for delivery in deliveries {

            if let value = delivery.value as? Double {
                castedDeliveries[Double(delivery.key as! NSNumber)] = value //Could not cast value of type 'NSTaggedPointerString' (0x1a1e3af20) to 'NSNumber' (0x1a1e458b0).
            }
        }
        settings!.deliveries = castedDeliveries
    }

這就是我嘗試投射的內容,作為服務器的JSON響應的一部分:

deliveries =            {
    2 = 0;
    5 = "2.59";
    7 = "3.59";
};

它不起作用,因為注釋行有錯誤:

無法將類型'NSTaggedPointerString'(0x1a1e3af20)的值強制轉換為'NSNumber'(0x1a1e458b0)。

您正在嘗試直接轉換字典,但是您需要轉換每個鍵-值對。 如果您想要解決此問題的通用解決方案,請查看SwiftyJSON庫,該庫為您解決了JSON解析問題。

強制轉換並不意味着將數據從一種類型轉換為另一種。
您的字典似乎由Integer鍵和String值組成。
如果要轉換其他內容,可以使用map函數。

let converted = deliveries.map{[Double($0) : Double($1)]}

但是要注意。
這里我們要說的,迭代的字典(在$ 0,則在$ 1有值的字典鍵),並創建一個具有新字典的鍵Double在關鍵的價值和作為新值初始化Double初始化為舊字典值。 上一次轉換可能會失敗,因此返回的數據是可選的。

正如我在評論中指出的那樣,這不是強制性的。 您要進行數據轉換。 您需要明確地執行此操作,尤其是在這種情況下,因為它可能會失敗。

查看錯誤,我認為您這里確實有[String:String] NSDictionary (以NSDictionary形式)。 這表明JSON編碼不正確,但這就是生活。 假設dictionary看起來像這樣:

let dictionary: NSDictionary = ["deliveries": ["2":"0", "5": "2.59", "7": "3.59"]]

您可以將其轉換為[Double:Double]如下所示:

if let jsonDeliveries = dictionary["deliveries"] as? [String:String] {
    var deliveries: [Double: Double] = [:]
    for (key, value) in jsonDeliveries {
        if let keyDouble = Double(key),
            valueDouble = Double(value) {
                deliveries[keyDouble] = valueDouble
        }
    }
    // Use deliveries
}

這默默地忽略了所有不能轉換為Double的值。 如果您希望產生錯誤,請使用guard let而不是if let

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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