加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 如何使用枚举(在结构中定义)作为字典的键?

发布时间:2020-12-14 05:45:55 所属栏目:百科 来源:网络整理
导读:我有以下代码: struct TestStruct2 { let field1: String let field2: Int enum TestEnum2 { case Value1 case Value2 }} let dic2 = DictionaryTestStruct2.TestEnum2,TestStruct2() let dic3 = [TestStruct2.TestEnum2 : TestStruct2]() dic2成功运作. 但
我有以下代码:
struct TestStruct2 {
    let field1: String
    let field2: Int

    enum TestEnum2 {
        case Value1
        case Value2
    }

}

    let dic2 = Dictionary<TestStruct2.TestEnum2,TestStruct2>()
    let dic3 = [TestStruct2.TestEnum2 : TestStruct2]()

dic2成功运作.

但dic3返回编译器错误:

(Type of expression is ambiguous without more context)

我不明白为什么.有任何想法吗?

正如@Hamish在评论中所提到的,这是一个编译器错误.您已经展示了一种使用长格式的解决方法:
let dic2 = Dictionary<TestStruct2.TestEnum2,TestStruct2>()

第二种解决方法是为嵌套类型创建一个类型:

typealias TestStruct2Enum2 = TestStruct2.TestEnum2

let dic3 = [TestStruct2Enum2 : TestStruct2]()

第三种解决方法是创建整个字典的类型:

typealias Test2Dict = [TestStruct2.TestEnum2 : TestStruct2]

let dic4 = Test2Dict()

第四种解决方法是显式指定类型并使用[:]文字初始化字典:

let dic5: [TestStruct2.TestEnum2 : TestStruct2] = [:]

最后的解决方法是将文字转换为类型:

let dic6 = [:] as [TestStruct2.TestEnum2 : TestStruct2]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读