Что такое AnyObject в Swift?

«Что такое AnyObject в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

AnyObject — это протокол, который представляет любой экземпляр класса. В отличие от Any, который может представлять абсолютно любой тип (класс, структуру, перечисление, функцию), AnyObject ограничен только ссылочными типами (классами).

Основное назначение:

  • Совместимость с Objective-C API, где ожидаются объекты классов.
  • Хранение разнородных экземпляров классов в коллекциях.
  • Проверка и приведение типов с помощью операторов is и as?/as!.

Пример использования:

class MyClass {}
let objectArray: [AnyObject] = [MyClass(), NSString("text")]

for obj in objectArray {
    if let myInstance = obj as? MyClass {
        print("Найден экземпляр MyClass")
    }
}

Важное ограничение: AnyObject не может содержать типы значений (value types): структуры (struct) и перечисления (enum). Для работы с любыми типами, включая value types, используйте Any.