Swift中无法识别Objective-C协议

菲斯特

我们正在将现有的类从Objective-C迁移到Swift。在视图控制器类中,我正在实现协议,并尝试将视图控制器添加为其中包含的对象的委托。当我尝试在Swift中将“ self”添加为对象的委托时,出现以下编译错误:

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)

我已经通过检查成功验证了'self'在运行时是ListenerProtocol对象:

if self.conformsToProtocol(ListenerProtocol){
    // ...
}

在包含委托属性的对象中,在Objective-C中定义了addListener方法,如下所示:

- (void)addListener:(id<ListenerProtocol>)listener {
    // ...
}

Swift类完全实现了ListenerProtocol中定义的所有方法。我不明白为什么这在Swift中不起作用。有人可以提出建议吗?谢谢!

ne

问题不在于ListenerProtocol,而是manager实现的协议按类型判断,addListener似乎是作为一种可选方法提供的。注意函数类型末尾的问号:

((ListenerProtocol) -> Void)?

这通常发生在(实际上,我认为它只发生在)Objective-C可选协议方法上。

您应该能够编写manager?.addListener?(self)manager?.addListener!(self)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Objective-C类中的Swift协议

来自分类Dev

在Swift中实现Objective C协议

来自分类Dev

在 Swift 中实现 Objective-C 协议

来自分类Dev

与Swift集成Objective C协议

来自分类Dev

Swift协议不会触发Objective C协议方法

来自分类Dev

Swift中不可见的Objective-C协议方法

来自分类Dev

符合Objective-C协议的Swift类

来自分类Dev

在Objective-C中使用Swift协议

来自分类Dev

在Swift上委派Objective-C协议

来自分类Dev

NSXPCInterface构造函数无法识别Swift中的协议

来自分类Dev

Objective C协议泛型

来自分类Dev

Swift中无法识别C指针数组

来自分类Dev

Swift无法将符合协议的类作为函数参数传递给Objective-C文件中的函数

来自分类Dev

使用getter在Objective-C协议上的Swift 1.2错误

来自分类常见问题

在Objective-C类中导入Swift协议

来自分类Dev

Swift对应的Objective C语法“ extension where self:<某些协议>”

来自分类Dev

在Swift中将字典对象传递给Objective C协议

来自分类Dev

如何在Swift中为Objective-C中定义的接口指定协议名称

来自分类Dev

Objective-C协议的默认实现

来自分类Dev

Objective-C协议不发送消息

来自分类Dev

Objective-C对实现协议的对象的引用

来自分类Dev

协议中的objective-c定义了一个属性协议

来自分类Dev

Swift中不应该执行Objective-C的可选协议吗?

来自分类Dev

如何使用Swift中的协议公开Objective-C对象的私有类方法?

来自分类Dev

Swift中的Objective-C协议-显示不符合错误

来自分类Dev

在Objective-C中实现协议特定的方法

来自分类Dev

在Objective-C iOS中采用多种协议

来自分类Dev

在Objective-C iOS中采用多种协议

来自分类Dev

谁对Objective-C中的协议做什么?

Related 相关文章

热门标签

归档