Мы находимся в процессе переноса существующих классов из Objective-C в Swift. В классе контроллера вида я реализую протокол и пытаюсь добавить контроллер представления в качестве делегата объекта, содержащегося в нем. Когда я пытаюсь добавить «себя» в качестве делегата объекта в Swift я получаю следующее компиляции ошибка:Протокол Objective-C не распознается в Swift
Cannot call value of non-function type '((ListenerProtocol) -> Void)?
Вот существующая реализация в Obj-C
@interface SomeViewController : UIViewController <ListenerProtocol> ...
А добавив класс как слушатель (делегат)
[manager addListener:self];
Это работает без проблем. Но версия Swift терпит неудачу в том, что похоже на тот же код. Вот версия Swift одного и того же вызова:
@objc class SomeSwiftViewController: UIViewController, ListenerProtocol ...
И призыв к «AddListener»
manager?.addListener(self)
Я успешно, что «я» является объектом ListenerProtocol во время выполнения проверяется путем проверки:
if self.conformsToProtocol(ListenerProtocol){
// ...
}
в объекте, содержащем свойство делегата способ добавления слушателя определен в Objective-C следующим образом:
- (void)addListener:(id<ListenerProtocol>)listener {
// ...
}
Класс Swift полностью реализует все методы, определенные в ListenerProtocol. Я не понимаю, почему это не работает в Swift. Может ли кто-нибудь сделать предложение? Благодаря!
Не могли бы вы показать, где определено 'manager.addListener'? –