Разница между переносом значения и явным объявлением значения как типа в Swift - PullRequest
1 голос
/ 25 октября 2019

Я натолкнулся на неоднородное словарное определение, подобное этому, в учебном пособии онлайн:

var mixedMap4 = [AnyHashable(0): "Zero" as Any,
                 AnyHashable(1): 1.0 as Any,
                 AnyHashable("pi"): 3.14 as Any]

Мне было интересно, почему автор решил написать AnyHashable(0) вместо 0 as AnyHashable. Когда я попробовал это на детской площадке Swift, это тоже сработало. Однако, когда я превратил "Zero" as Any в Any(0), это выдает следующее

error: error: Dictionary.xcplaygroundpage: 41: 34: error: тип протокола 'Any' не может быть создан var varMMM4 =[AnyHashable (0): Any («Ноль»),

Спасибо за ответ

1 Ответ

3 голосов
/ 25 октября 2019

Подсказка в сообщении об ошибке.

AnyHashable - это структура, которая стирает тип базового хешируемого типа, и поэтому может быть непосредственно создана как объект

Any является протоколом и, следовательно, не может быть непосредственно создана, хотя все другие типы могут быть выполнены с этим, таким образом String, такой как "Ноль" может быть брошен как Any, но Any(String) не имеет смысла.

Для меня все это просто похоже на ведрокуча неприятностей в ожидании!

...