我試圖將兩個不同的泛型類型放入集合中。在這個例子中有兩個陣列,一個包含Int
s和另一個String
s。將兩個泛型數組合併成一個具有泛型的Swift字典
let intArray = Array<Int>()
let stringArray = Array<String>()
let dict = [1:intArray, "one": stringArray]
錯誤消息爲表達式的類型在沒有更多上下文的情況下是不明確的。
所以,我想指定Dictionary
的類型
let dict: [Hashable: Any] = [1:intArray, "one": stringArray]
這導致了兩個錯誤。
- 不支持使用'Hashable'作爲符合協議'Hashable'的具體類型。
- 協議「哈希的」只能作爲一種通用的約束,因爲它具有自我或相關類型的要求
添加import Foundation
和使用NSDictionary
作爲類型工作正常。
let dict: NSDictionary = [1:intArray, "one": stringArray]
但是,在沒有使用Foundation的情況下,這在純Swift中也應該是可能的。 Dictionary
必須有什麼類型?
編輯:這顯然有更多的與鍵的類型。他們必須是相同的類型,不僅符合Hashable
。
let dict: [Int:Any] = [1:intArray, 2: stringArray]
This works。但是是否有可能使價值的類型更加精確? [Int:Array<Any>]
不起作用。
這樣做的根本原因是Hashable符合Equatable,而Equatable具有'==(lhs:Self,rhs:Self)'要求,這就是'Protocol'Hashable'後面的要求,因爲它只能用作通用約束,因爲它具有自我或相關類型要求「。 – BallpointBen
另外,你需要'=='來解決散列衝突,所以這似乎是編譯器的有效投訴。 – BallpointBen
[Swift中的通用字典值類型]的可能重複(http://stackoverflow.com/questions/24736612/generic-dictionary-value-type-in-swift) – courteouselk