Cocoa, Swift, Objective-C: id Compatibility (Id совместимость)

Id в Objective-C — это любой объект. Для того, чтобы как то отразить id в swift ввели протокол AnyObject. Таким образом все id при портировании в swift заменяют на AnyObject.
Так же можно переназначить переменную объектом другого типа, если ее тип указан как AnyObject

Так же возможно вызывать любой Objective-C метод или свойства на AnyObject (включая Objective-C совместимые методы помеченные атрибутом @objc)

Но если будет вызван не существующий метод или обратимся к не существующему свойству — быдет вызвана ошибка

Чтобы избежать этого — воспользуемся преимуществами опционалов, вызов метода на AnyObject трактуется как Implicitly Unwrapped Optionals (тот самый который с !), соответственно можно проверять на корректность с помощью Optional Binding.
Вызов же свойств на AnyObject — всегда возвращает опционал

При приведении AnyObject к конкретному типу как всегда вернется опционал

Ну или если уверены в том, какого типа переменная — можно приводить с помощью as! (если предположение ошибочно — вылетит ошибка)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *