用Objective-C类别扩展Swift类

用Objective-C类别扩展Swift类,第1张

用Objective-C类别扩展Swift类 坏人

我也一直在与这个问题作斗争。不幸的是,文档非常明确地指出不允许这种模式:

为避免循环引用,请勿将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"
    可以从桥接头中删除

如果需要支持两个以上的输入参数,或者需要更紧密的类型耦合,我建议您使用运行时来调用基础函数。这里有一个很好的描述。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5049197.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存