Приведение типов для AnyObject для представления экземпляров любого ссылочного типа

 var array = [AnyObject]()
 struct Test {}
 array.append(Test())

Когда я пишу этот код на игровой площадке, он выдает следующую ошибку: Тип «Тест» не соответствует протоколу «AnyObject»

Я предполагаю, что это терпит неудачу, потому что struct является типом значения, а не ссылочным типом. Но когда я запускаю этот код

var array = [AnyObject]()
array.append(1)
array.append(2.0)
array.append("3")

Это работает, но все это также типы значений, но в этом случае ошибка не выдается Почему?


person Community    schedule 31.05.2016    source источник
comment
прочитайте этот ответ stackoverflow.com/a/32554435/5475238   -  person Shadow Of    schedule 31.05.2016


Ответы (1)


Для вашего успеха за кулисами происходит некоторое преобразование.

Попробуйте добавить это в конец ваших приложений, чтобы увидеть, что происходит:

for item in array {
    print(item.dynamicType)
}
person Phillip Mills    schedule 31.05.2016
comment
Он печатает это __NSCFNumber __NSCFNumber _NSContiguousString, но мои типы значений были числовыми, двойными и строковыми - person ; 31.05.2016
comment
Это некоторое преобразование задокументировано в developer.apple.com/ библиотека/ios/documentation/Swift/Conceptual/: String -> NSString; Int, Float, Double -> NSNumber. - person Martin R; 31.05.2016
comment
@MartinR Я придерживался теории «увидеть — значит поверить». :) - person Phillip Mills; 31.05.2016
comment
Итак, вы оба имеете в виду, что преобразование происходит так, как это числовые типы в строки NSNumber в массивы NSString в словари NSArray в NSDictionary? - person ; 31.05.2016