Еще один вопрос «тип выражения неоднозначен». Я не думаю, что кто-то поднимал эту конкретную ситуацию до сих пор...
Если я встрою класс в другой класс и сделаю его Hashable
, кажется, я не смогу использовать его в качестве ключа:
class TestClassWithKey {
class Key: Hashable {
static func == (left: Key, right: Key) -> Bool {
return false
}
var hashValue: Int {
return 4
}
}
}
var myList = [TestClassWithKey.Key: TestClassWithKey]()
// Above line gives classic "type of expression is ambiguous"
// compiler error.
Очевидно смешной пример, но если я сделаю то же самое, но без вложенности, все будет отлично:
class TestClassWithoutKeyKey: Hashable {
static func == (left: TestClassWithoutKeyKey, right: TestClassWithoutKeyKey) -> Bool {
return false
}
var hashValue: Int {
return 4
}
}
class TestClassWithoutKey {
}
var myList = [TestClassWithoutKeyKey: TestClassWithoutKey]()
Я хотел бы знать, есть ли способ использовать вложенный тип в качестве ключа к словарю, или (в идеале), если нет, то почему бы и нет.
На Swift 3, но я не думаю, что это актуально...
var myList : [TestClassWithKey.Key : TestClassWithKey] = [:]
, либо сослаться на тип без синтаксического сахара, либо использоватьtypealias
. - person Hamish   schedule 06.12.2016