Я изо всех сил пытаюсь понять, почему экземпляр AnyObject
равен массиву Anyobject
, т. е. почему этот оператор var one: AnyObject = [AnyObject]()
действителен?
Почему `var one: AnyObject = [AnyObject]()` действителен?
Ответы (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
извините, я думаю, что я пытаюсь спросить, почему законно присваивать массив AnyObject экземпляру AnyObject?
- person Thor; 10.08.2016
Из-за автоматического соединения с NSArray.
- person jtbandes; 10.08.2016
@TonyStark: когда вы объявляете такую переменную
var one: AnyObject
, вы можете поместить в нее любую вещь, соответствующую протоколу AnyObject
. Поскольку массив Swift соединен мостом с NSArray
, что соответствует AnyObject
, код действителен.
- person Luca Angeletti; 10.08.2016
@appzYourLife, которые имеют смысл. Большое спасибо за помощь! это меня давно озадачило :)
- person Thor; 10.08.2016
Object one = new Object[3];
. - person Thilo   schedule 10.08.2016import Foundation
из верхней части вашего файла. Настоящий массив Swift не являетсяAnyObject
. - person nhgrif   schedule 10.08.2016