Ответ
AnyObject — это протокол, представляющий экземпляр любого класса. Он используется в Swift для типобезопасной работы с объектами, когда конкретный тип класса неизвестен или может быть разным.
Основные сценарии использования:
- Совместимость с Objective-C API: Аналог
id. Позволяет передавать объекты классов в API, ожидающие нетипизированные ссылки. - Хранение гетерогенных коллекций объектов классов:
let uiComponents: [AnyObject] = [UIButton(), UILabel(), UIImageView()] - Проверка типа и приведение (type casting):
for object in uiComponents { if let button = object as? UIButton { button.setTitle("Tap", for: .normal) } } - Определение протоколов только для классов (class-only protocols):
protocol MyDelegate: AnyObject { // Делегат должен быть классом func didUpdate() }
Важное отличие от Any:
AnyObjectограничен только классами.Anyможет представлять экземпляр любого типа, включая структуры, перечисления, функции и классы.
let mixedArray: [Any] = ["String", 42, UIView()] // Допустимо
let classArray: [AnyObject] = [UIView(), NSObject()] // Только классы
// let errorArray: [AnyObject] = ["String", 42] // Ошибка: String и Int - структуры