Прежде чем начать, я уже прочитал документацию Swift. Я все еще пытаюсь понять, что такое AnyObject на самом деле есть. Является ли он базовым классом для всех объектов/классов в Swift, так как NSObject находится в Objective C?Нужно уточнить AnyObject в Swift
Если я создаю массив типа [AnyObject] и заполнить его с Movie экземпляров класса, это будет означать, что AnyObject является базовым классом Movie класса справа?
let someObjects: [AnyObject] = [
Movie(name: "2001: A Space Odyssey", director: "Stanley Kubrick"),
Movie(name: "Moon", director: "Duncan Jones"),
Movie(name: "Alien", director: "Ridley Scott")
]
Это должно быть правдой, иначе вы не смогли бы опущенными с оператором литья типа (, как!) не так ли?
for object in someObjects {
let movie = object as! Movie
println("Movie: '\(movie.name)', dir. \(movie.director)")
}
Свифта состояния документации:
AnyObject может представлять экземпляр любого типа класса.
Итак ... представить его в том смысле, что AnyObject является экземпляром базового класса?
Я новичок в Swift поэтому, пожалуйста, терпения :)
@vacawama уже дал хороший ответ о том, что такое AnyObject. (проголосовали.) Это протокол для всех объектов класса. В swift протокол является типом, поэтому AnyObject означает «любой объект, соответствующий этому протоколу». Я хочу упомянуть, что это НЕ. Это не базовый класс. В отличие от других языков OO, таких как Objective-C, Swift не имеет общего базового класса для всех объектов. Вместо этого все объекты класса соответствуют протоколу AnyObject. –
@ DuncanC Итак, вы говорите, что все объекты класса автоматически соответствуют протоколу AnyObject? –
Да, все объекты класса соответствуют протоколу AnyObject. Таким образом, все экземпляры могут быть назначены переменной AnyObject, и все экземпляры классов могут быть помещены в массив '[AnyObject]'. Вы не можете расширять протокол «AnyObject», поэтому в этом отношении он не действует как базовый класс. – vacawama