使用泛型将两个泛型数组放入一个Swift字典中

Orkoden

我正在尝试将两个不同的泛型类型放入集合中。在此示例中,有两个数组,一个包含Ints ,另一个包含Strings。

let intArray = Array<Int>()
let stringArray = Array<String>()
let dict = [1:intArray, "one": stringArray]

错误显示表达式类型不明确,没有更多上下文。

所以我尝试指定Dictionary的类型

let dict: [Hashable: Any] = [1:intArray, "one": stringArray]

这导致两个错误。

  • 不支持将“哈希”用作符合协议“哈希”的具体类型。
  • 协议“可散列”只能用作通用约束,因为它具有“自身”或关联的类型要求

添加import Foundation和使用NSDictionary作为类型工作正常。

let dict: NSDictionary = [1:intArray, "one": stringArray]

但这也可以在不使用Foundation的情况下在纯Swift中实现。Dictionary必须具有的类型是什么

编辑:这显然与键的类型有关。它们必须具有相同的类型,而不仅仅是符合Hashable

let dict: [Int:Any] = [1:intArray, 2: stringArray]

这有效。但是有可能使值的类型更精确吗?[Int:Array<Any>]不起作用。

礼貌的麋鹿

详细说明@RobNapier答案,这是一种enum用于字典的键和值的类似方法

enum Key: Equatable, Hashable {
    case IntKey(Int)
    case StringKey(String)

    var hashValue: Int {
        switch self {
        case .IntKey(let value)     : return 0.hashValue ^ value.hashValue
        case .StringKey(let value)  : return 1.hashValue ^ value.hashValue
        }
    }

    init(_ value: Int)    { self = .IntKey(value) }
    init(_ value: String) { self = .StringKey(value) }
}

func == (lhs: Key, rhs: Key) -> Bool {
    switch (lhs, rhs) {
    case (.IntKey(let lhsValue),    .IntKey(let rhsValue))    : return lhsValue == rhsValue
    case (.StringKey(let lhsValue), .StringKey(let rhsValue)) : return lhsValue == rhsValue
    default: return false
    }
}

enum Value {
    case IntValue(Int)
    case StringValue(String)

    init(_ value: Int)    { self = .IntValue(value) }
    init(_ value: String) { self = .StringValue(value) }
}

var dict = [Key: Value]()

dict[Key(1)] = Value("One")
dict[Key(2)] = Value(2)
dict[Key("Three")] = Value("Three")
dict[Key("Four")] = Value(4)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

如何检查两个结构在Swift中是否具有相同的泛型参数类型?

来自分类Dev

Java泛型的另一个泛型

来自分类Dev

使用泛型链接两个层次结构

来自分类Dev

使用泛型创建一个函数,该函数将在Swift中返回另一个函数

来自分类Dev

如何在Swift中使用泛型对另一个类进行子类化?

来自分类Dev

如何声明一个泛型将使用的枚举?

来自分类Dev

是否可以使用Java中的两个泛型来创建对象?

来自分类Dev

扩展一个协议,其中self:Swift中的泛型类型(需要<...>中的参数)

来自分类Dev

在Swift中将一个泛型约束到另一个泛型

来自分类Dev

如何编写一个特征绑定以添加两个泛型类型的引用?

来自分类Dev

从另一个泛型枚举初始化泛型Swift枚举?

来自分类Dev

通过TypeScript中的另一个泛型类型保留泛型类型

来自分类Dev

创建使用泛型MongoDB的POJO一个包装

来自分类Dev

如何将两个打字稿泛型联系在一起

来自分类Dev

语言:如何使用泛型将抽象类扩展到两个级别

来自分类Dev

如何检查两个结构在Swift中是否具有相同的泛型参数类型?

来自分类Dev

依赖于Rust中另一个泛型的泛型类型

来自分类Dev

通过TypeScript中的另一个泛型类型保留泛型类型

来自分类Dev

具有两个泛型参数的C#中的泛型方法

来自分类Dev

如何用一个类型参数为泛型类型指定两个具体的类型参数?

来自分类Dev

使用泛型创建一个函数,该函数将在Swift中返回另一个函数

来自分类Dev

扩展一个协议,其中self:Swift中的泛型类型(需要<...>中的参数)

来自分类Dev

从另一个泛型枚举初始化泛型Swift枚举?

来自分类Dev

一个泛型类使用expression <T,bool>方法创建泛型扩展

来自分类Dev

如何使泛型对象使用在Typescript中使用一个类型或void的两个函数的函数参数

来自分类Dev

继承两个泛型类型

来自分类Dev

将 Java 泛型限制为一个类

来自分类Dev

如何使用 linq c# 或内部泛型方法为任何一个或两个 prop 赋值?

来自分类Dev

Java 泛型:如何扩展另一个泛型类的泛型类

Related 相关文章

  1. 1

    如何检查两个结构在Swift中是否具有相同的泛型参数类型?

  2. 2

    Java泛型的另一个泛型

  3. 3

    使用泛型链接两个层次结构

  4. 4

    使用泛型创建一个函数,该函数将在Swift中返回另一个函数

  5. 5

    如何在Swift中使用泛型对另一个类进行子类化?

  6. 6

    如何声明一个泛型将使用的枚举?

  7. 7

    是否可以使用Java中的两个泛型来创建对象?

  8. 8

    扩展一个协议,其中self:Swift中的泛型类型(需要<...>中的参数)

  9. 9

    在Swift中将一个泛型约束到另一个泛型

  10. 10

    如何编写一个特征绑定以添加两个泛型类型的引用?

  11. 11

    从另一个泛型枚举初始化泛型Swift枚举?

  12. 12

    通过TypeScript中的另一个泛型类型保留泛型类型

  13. 13

    创建使用泛型MongoDB的POJO一个包装

  14. 14

    如何将两个打字稿泛型联系在一起

  15. 15

    语言:如何使用泛型将抽象类扩展到两个级别

  16. 16

    如何检查两个结构在Swift中是否具有相同的泛型参数类型?

  17. 17

    依赖于Rust中另一个泛型的泛型类型

  18. 18

    通过TypeScript中的另一个泛型类型保留泛型类型

  19. 19

    具有两个泛型参数的C#中的泛型方法

  20. 20

    如何用一个类型参数为泛型类型指定两个具体的类型参数?

  21. 21

    使用泛型创建一个函数,该函数将在Swift中返回另一个函数

  22. 22

    扩展一个协议,其中self:Swift中的泛型类型(需要<...>中的参数)

  23. 23

    从另一个泛型枚举初始化泛型Swift枚举?

  24. 24

    一个泛型类使用expression <T,bool>方法创建泛型扩展

  25. 25

    如何使泛型对象使用在Typescript中使用一个类型或void的两个函数的函数参数

  26. 26

    继承两个泛型类型

  27. 27

    将 Java 泛型限制为一个类

  28. 28

    如何使用 linq c# 或内部泛型方法为任何一个或两个 prop 赋值?

  29. 29

    Java 泛型:如何扩展另一个泛型类的泛型类

热门标签

归档