在Swift中调用OC的接口有时发现并不符合Swift的语法规范或者使用起来会比较别扭,这个时候可以使用NS_REFINED_FOR_SWIFT宏定义来对OC的接口进行升级改造。

假设OC中有类文件和接口如下:

.h文件
@interface TestOC : NSObject- (void)changeId:(int)uid name:(NSString *)name address:(NSString *)address;@end.m文件
@interface TestOC ()@property (assign, nonatomic) int objectId;
@property (copy, nonatomic) NSString *name;
@property (copy, nonatomic) NSString *address;@end@implementation TestOC- (void)changeId:(int)uid name:(NSString *)name address:(NSString *)address {self.objectId = uid;self.name = name;self.address = address;}@end

通过桥接后在swift中调用如下

let test = TestOC()test.changeId(3, name: "jerry", address: "tianhe district")

如果想要对它进行修改,可以使用宏定义NS_REFINED_FOR_SWIFT作为方法声明的后缀:

- (void)changeId:(int)uid name:(NSString *)name address:(NSString *)address NS_REFINED_FOR_SWIFT;

这时候该方法在OC中的调用并不会受到影响,但是桥接到swift中调用的时候需要在方法名前增加后缀__,我们可以在自己实现的新的方法中对它进行调用并升级改造该方法在swift中的表现:

extension TestOC {func edit(id: Int, name: String, address: String) {__changeId(Int32(id), name: name, address: address)}}

在extension中对原来的类进行扩展并增加新的方法,在方法中调用被标记的方法,那么在swift中就可以对该类的方法进行新的形式的调用:

let test = TestOC()//test.__changeId(3, name: "jerry", address: "tianhe district")test.edit(id: 3, name: "Jerry", address: "tianhe district")

因为这只是对旧方法进行另一种格式的调用,所以把方法升级成计算属性也是可以的,大家可以根据swift的规范和习惯设计成不同的形式,复用oc的代码功能实现。

Swift 优化OC接口 NS_REFINED_FOR_SWIFT相关推荐

  1. Swift 重命名OC接口 NS_SWIFT_NAME

    使用宏定义NS_SWIFT_NAME为OC接口重命名 用法:为类和代理重命名时它作为一个前缀,其他类型(属性.枚举.别名)时作为后缀 NS_SWIFT_NAME(Sandwich.Preference ...

  2. swift 打包sdk_在封装SDK中Swift和OC混编之相互调用

    oc和swift混编之相互调用.jpg 在非SDK中: 1.swift调用oc 步骤: 创建 工程名-Bridging-Header.h 放入oc的头文件,swift即可调用 在swift项目中或者在 ...

  3. swift_037(Swift之Swift和OC混编)

    接触Swift有一段时间了,但是一直没有试过混合编程.难得的五一小长假,就有空简单的写写Swift和OC的混合编程的Demo. 1.新建一个空的Swift项目 注意语言选择Swift. 2.新建一个O ...

  4. swift与OC之间不得不知道的21点

    2019独角兽企业重金招聘Python工程师标准>>> swift与OC之间不得不知道的21点 原文  http://www.cnblogs.com/dsxniubility/p/4 ...

  5. Swift和OC文件间的相互调用

    2019独角兽企业重金招聘Python工程师标准>>> 公共文件/桥接的方法 2016/1/26         13:33 Swift使用OC文件方法 看完上面内容之后,你只需要这 ...

  6. 在项目里交叉使用Swift和OC

    wift and Objective-C in the Same Project 在项目里交叉使用Swift和OC Swift与OC的兼容性使得你可以在项目里使用Swift+OC的方式编写应用程序,称 ...

  7. 在项目里交叉使用Swift和OC【转】

    Swift and Objective-C in the Same Project 在项目里交叉使用Swift和OC Swift与OC的兼容性使得你可以在项目里使用Swift+OC的方式编写应用程序, ...

  8. IOS中的swift和oc关于对象模型的description方法重写

    IOS中的swift和oc关于对象模型的description方法重写 先讲OC的,oc比较重要,放在最前面. 首先创建一个cocoa Touch Class,继承NSObject, 命名Person ...

  9. swift和OC混编

    swift和OC混编

  10. Swift与OC混编过程中的配置

    女主宣言 在使用Swift进行iOS开发的过程中,经常涉及到Swift与OC混编的情况,有时主工程是OC的需要另外编入Swift代码,而有时主工程是Swift的需要另外编入OC代码.这其中涉及到修改一 ...

最新文章

  1. LabVIEW色彩定位实现药品包装质量检测(实战篇—4)
  2. RT-Thread智能车培训计划-2021
  3. linux查看vxlan命令,[svc]linux上vxlan实战
  4. pom.xml配置详解
  5. Oracle Sql 胡乱记
  6. 黑发不知勤学早,白首方悔读书迟———颜真卿
  7. mw315r 虚拟服务器,水星MW315R桥接设置教程
  8. 热水器多长时间清理一次比较好?该怎么清理?
  9. php中获取memcache所有key,Memcache查看列出所有key方法及memkeys实时查看key使用情况...
  10. HTML的段落与注释元素
  11. 美国科技股昨日普遍下跌:华尔街受特朗普影响抛售科技股票
  12. DEBUG模式下,视频丢包严重;RELEASE就好了
  13. shl归纳推理测试题库_SHL测评:KPMG经典24题,KPMG经典36题
  14. python导入模块的语法结构_python学习第五讲,python基础语法之函数语法,与Import导入模块....
  15. 修改客户端 与服务器断开,如何处理服务器或客户端socket断开
  16. ReadLikeHumans: Autonomous,Bidirectional and Iterative Language Modeling for Scene Text Recognition
  17. -ile “……的“ 形容词后缀
  18. 鸿蒙系统新平板,华为官宣新款MatePad Pro,首款鸿蒙系统平板
  19. mongodb Reconfig attempted to install a config that would change the implicit default write concern.
  20. 全国大学生乒乓球锦标赛

热门文章

  1. 苹果app退款_苹果上最流氓的功能,终于被彻底关掉
  2. cnavas手绘图形库 : rough.js
  3. 用了python之后笔记本卡了_干货!如何用Python在笔记本电脑上分析100GB数据(上)...
  4. 品牌制造商做电子商务的成本结构分析
  5. dpdk大页内存原理
  6. 云硬盘备份 | 概览
  7. 尝一尝HBuilderX香不香
  8. 游戏开发需要具备哪些技术?
  9. 达人评测 Redmi G 2021锐龙版怎么样
  10. aardio java_图形界面Aardio