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