我试图将两个不同的泛型类型放入集合中。在这个例子中有两个阵列,一个包含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