栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用Objective-C类别扩展Swift类

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用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"
    可以从桥接头中删除

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417849.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号