我也一直在与这个问题作斗争。不幸的是,文档非常明确地指出不允许这种模式:
为避免循环引用,请勿将Swift代码导入到Objective-C标头(.h)文件中。相反,您可以转发声明Swift类或协议以在Objective-
C接口中对其进行引用。Swift类和协议的前向声明只能用作方法和属性声明的类型。
同样在整个链接页面中,您会注意到它不断提及将生成的标头专门导入.m文件:
善良将Swift代码从同一目标导入到Objective-C
将Swift代码从该目标导入到该目标内的任何Objective-C .m文件中
一个可能适合您的解决方案是创建一个快速扩展,重新定义类别中所需的每种方法。它既脆弱又丑陋,但可以说是最干净的解决方案。
extension SomeClass { @nonobjc func someMethod() { self.performSelector(Selector("someMethod")) }}
@noobjc
在前面添加允许使用相同的方法签名,而无需覆盖ObjC实现- 现在
import "SomeClass+Extension.h"
可以从桥接头中删除
如果需要支持两个以上的输入参数,或者需要更紧密的类型耦合,我建议您使用运行时来调用基础函数。这里有一个很好的描述。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)