Почему `var one: AnyObject = [AnyObject]()` действителен?

Я изо всех сил пытаюсь понять, почему экземпляр AnyObject равен массиву Anyobject, т. е. почему этот оператор var one: AnyObject = [AnyObject]() действителен?


person Thor    schedule 10.08.2016    source источник
comment
Нередко массивы также являются объектами (или могут быть соединены мостом с объектами). В Java вы также можете сделать Object one = new Object[3];.   -  person Thilo    schedule 10.08.2016
comment
Что бы это ни стоило, все, что вам нужно сделать, чтобы это перестало работать, это удалить import Foundation из верхней части вашего файла. Настоящий массив Swift не является AnyObject.   -  person nhgrif    schedule 10.08.2016
comment
Спасибо всем за помощь! так люблю сообщество ТАК, лол   -  person Thor    schedule 10.08.2016


Ответы (1)


С этим кодом

var one: AnyObject = [AnyObject]()

Вы НЕ сравниваете 2 значения.

Вы просто присваиваете массив [AnyObject] переменной типа AnyObject.

Поскольку массив Swift связан с NSArray (который является объектом), компилятор согласен с этим кодом.

Похожие примеры

В приведенном ниже коде мы объявляем переменную типа AnyObject и помещаем в нее целое число. Поскольку Int si снова соединен с NSNumber (который является объектом), компилятор отлично работает

var one: AnyObject = 1

Другие примеры

var word: AnyObject = "hello"
var condition: AnyObject = true

Блокировка моста к NSArray

Если вы удалите линию import Foundation из Playground, то мост к NSArray прервется.

Теперь массив swift, который является структурой, больше не считается допустимым AnyObject (структуры не являются объектами), и вы получаете ошибку компиляции.

введите здесь описание изображения

person Luca Angeletti    schedule 10.08.2016
comment
извините, я думаю, что я пытаюсь спросить, почему законно присваивать массив AnyObject экземпляру AnyObject? - person Thor; 10.08.2016
comment
Из-за автоматического соединения с NSArray. - person jtbandes; 10.08.2016
comment
@TonyStark: когда вы объявляете такую ​​​​переменную var one: AnyObject, вы можете поместить в нее любую вещь, соответствующую протоколу AnyObject. Поскольку массив Swift соединен мостом с NSArray, что соответствует AnyObject, код действителен. - person Luca Angeletti; 10.08.2016
comment
@appzYourLife, которые имеют смысл. Большое спасибо за помощь! это меня давно озадачило :) - person Thor; 10.08.2016