45 Swift和OC的混编

桥接问题

桥接

image-20230316220515011.png
image-20230316220539263.png
image-20230316220636806.png
image-20230316220831205.png

如何在Swift和Objective-C中相互调用

Swift调用OC

image-20230316221029865.png

OC调用Swift

image-20230316221141304.png
image-20230316221809367.png

NS_SWIFT_NAME

  • 在Objective-C中,重新命名在swift中的名称

NS_SWIFT_UNANAILABLE

  • 在Swift中不可见,不能使用
image-20230316223250861.png
image-20230316223311534.png

Swift和Objective-C混合调用踩坑指南

Subclass

  • 对于自定义的类而言,Objective-C的类,不能继承自Swift的类,即要混编的OC类不能是Swift类的子类。反过来,需要混淆的Swift类可以继承自OC的类

image-20230316223601861.png
image-20230316223724791.png

Swift独有特性

  • Swift中有许多OC没有的特性,比如,Swift有元组、为一等公民的函数、还有特有的枚举类型。所以,要使用的混编文件要注意Swift独有属性问题

NS_REFINED_FOR_SWIFT

  • Objective-C的API和Swift的风格相差比较大,Swift调用Objective-C的API时可能由于数据类型等不一致导致无法达到预期(比如,Objective-C里的方法采用了C语音风格的多参数类型;或者Objective-C方法返回NSNotFound,在Swift中期望返回nil)。这时候就要NS_REFINED_FOR_SWIFT了
image-20230316224234351.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容