2014-11-06 32 views
0

我有用於合併兩個字典一起此銀行代碼:利用多種類型的合併字典,或任一/ AnyObject類型

extension Dictionary { 
    mutating func extend(newVals: Dictionary <String, Any>) { 
     for (key,value) in newVals { 
      self.updateValue(value, forKey:key) 
     } 
    } 
} 

包含.updateValue(, forKey:)線生成以下錯誤:

'protocol<>' is not convertible to 'Value' 

此前我有newVals作爲Dictionary <String, String>它工作得很好,所以我的猜測是問題是由使用Any引起的。

我在這裏的問題是,我正在使用字典與String s和Int s(以及可能其他類型的價值稍後)的混合物。

反正有沒有這extend函數與Any類型一起使用?

回答

2

你實際上並不需要(你不能)指定的函數聲明Any型 - 你需要有newValues字典的亞型匹配它的擴展字典:

extension Dictionary { 
    mutating func extend(newVals: Dictionary) { 
     for (key,value) in newVals { 
      self.updateValue(value, forKey:key) 
     } 
    } 
} 

var dict = ["one": 1, "two": 2, "hello": "goodbye"] 
dict.extend(["three": 3]) 
dict.extend(["foo": "bar"]) 

KeyValueDictionary類型中的類型別名,它映射到特定實例的特定鍵和值類型。

+1

你完全可以錯過'',這裏也只是說'newVals:Dictionary' – 2014-11-06 16:21:46

+0

這個擴展函數被用於字典已經被聲明爲'Dictionary '的地方。當使用這個'extend'函數時,我現在得到錯誤''Any'與'NSObject''不一樣? – Jimmery 2014-11-06 16:23:09

+0

你正在使用的字典之一是'[String:Any]',另一個是'[String:NSObject]' - 你需要調和與演員的不同之處。 – 2014-11-06 16:23:51

相關問題