推斷類型我有一個數組轉換爲一個字典一個看似合法的功能:斯威夫特不能從上下文
func arrayToDictionary<Key : Hashable, Value>
(source: Array<Value>, key: Value -> Key) -> Dictionary<Key, Value> {
var dictionary = Dictionary<Key, Value>()
for element in source {
let key = key(element)
dictionary[key] = element
}
return dictionary
}
現在,當我試圖把它叫做:
let dict = arrayToDictionary([1, 2, 3], { val in return val })
我得到一個錯誤 - 不能轉換表達式的類型'($ T6,(($ T9) - >($ T9) - > $ T8) - >((T9) - > $ T8) - > $ T8)
奇怪的是,如果我使用隱式返回:
let dict = arrayToDictionary([1, 2, 3], { val in val })
或簡寫:
let dict = arrayToDictionary([1, 2, 3], { $0 })
它工作得很好。爲什麼?
'讓字典= arrayToDictionary([1,2,3],{在VAL VAL})'(拿出'返回)也似乎工作得很好。 – 2014-09-22 18:14:02
而且,甚至是陌生人,用'return'將'val'明確地定義爲'Int':'let dict = arrayToDictionary([1,2,3],{(val:Int)in return val})'導致錯誤:''NSNumber'不是'Int''的子類型。再次返回'返回'仍然有效。 – 2014-09-22 18:21:58
這看起來像一個編譯器bug,我建議你報告它。一些優化在幕後進行得太早,並且類型檢查器不會很高興 – 2014-10-01 09:59:21