【问题标题】:Create dictionary of Comparable and Hashable keys?创建 Comparable 和 Hashable 键的字典?
【发布时间】:2015-02-12 18:41:31
【问题描述】:

这似乎是一个非常基本的问题,但一直无法找到答案。

这是我尝试过的

var items = [Comparable: [NSObject]]()

var items = [Comparable, Hashable: [NSObject]]()

var items = [protocol<Comparable, Hashable>: [NSObject]]()

typealeas Key = T where T: Hashable, T: Comparable
var items = [Key: [NSObject]]()

【问题讨论】:

    标签: swift generics dictionary


    【解决方案1】:

    ComparableHashable 都不能单独用作类型,因为它们的定义中包含 Self,并且只能用作泛型约束。

    无论如何,如果您考虑一下,让您的字典能够具有不同可比较类型的键,这实际上是没有意义的,因为每个可比较类型只能与自己的类型进行比较,而不能与其他类型进行比较。

    如果您的字典仅具有某个特定的可比较、可散列类型,则可以将包含此代码的函数或类设为通用并在其中约束类型参数:

    func foo<T : protocol<Comparable, Hashable> >() {
    
      var items = [T: [NSObject]]()
    
    }
    

    【讨论】:

    • 我明白你的意思,但我也不能只做 Hashable。 [可散列:[AnyObject]]。我不能在类本身上使用泛型,因为字典是在 UIViewController 中实例化的,而泛型不适用于 Objective C 类
    • @aryaxt:就像我说的,你不能使用ComparableHashable 本身作为类型。我不明白为什么您的视图控制器需要有一个未知的可比较和可散列键类型的字典。
    【解决方案2】:

    @newacct 回答的更新:

    从 Swift 4.2 开始,不再使用 protocol &lt; &gt; 语法。而是像这样使用&amp;

    <T: Comparable & Hashable>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 2019-02-08
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      相关资源
      最近更新 更多