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 не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.