Reputation: 139
I have the following code:
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 works successfully.
But dic3 returns an compiler error:
(Type of expression is ambiguous without more context)
I don't understand why. Any Ideas?
Upvotes: 1
Views: 149
Reputation: 154613
As mentioned by @Hamish in the comments, this is a compiler bug. You've already shown one workaround which is to use the long form:
let dic2 = Dictionary<TestStruct2.TestEnum2, TestStruct2>()
A second workaround is to create a typealias
for the nested type:
typealias TestStruct2Enum2 = TestStruct2.TestEnum2
let dic3 = [TestStruct2Enum2 : TestStruct2]()
A third workaround is to create a typealias
of the entire dictionary:
typealias Test2Dict = [TestStruct2.TestEnum2 : TestStruct2]
let dic4 = Test2Dict()
A fourth workaround is to explicitly specify the type and initialize the dictionary with the [:]
literal:
let dic5: [TestStruct2.TestEnum2 : TestStruct2] = [:]
A final workaround is to cast the literal to the type:
let dic6 = [:] as [TestStruct2.TestEnum2 : TestStruct2]
Upvotes: 1