前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >swift 与现有OC项目混编

swift 与现有OC项目混编

作者头像
大话swift
发布2019-07-04 11:09:03
1.2K0
发布2019-07-04 11:09:03
举报
文章被收录于专栏:大话swift大话swift大话swift

swift 与现有OC项目混编

最近在玩vapor,于是借助公司的服务器划分出来50G空间分配8G内存做了个App日志上传的server,顺便使用swift将日志收集集成到现有OC项目中…… 不得不说,swift与OC集成还是有一点小小麻烦:

1 做桥接头文件

项目名称-Bridging-Header.h

2 自动生成针对swift在OC中使用的头文件

项目名称-Swift.h

3 swift 暴漏给OC可使用的方法、属性 如果想在OC中可被调用,无论是属性还是function据需要使用 @objc

4 枚举 swift的规范是enum的case 中都是小写,而这个在OC中系统会给你自动的转换为 enum名称+case中变量转首字母大写

@objc public enum LogMode: Int{
   case debug    case product
}
@objc public enum LogLevel: Int{
   case info    case error    case warn
}=>>>
LogModeDebug
LogModeProduct

5 关于default的关键字 swift中可以使用 ``来包裹

@objc static let `default`: LogOnline = LogOnline()

OC 中你就别想啦 

6 关于使用 OC中导入项目名称-Swift.h即可调用所有swift暴漏出的属性和function,大家可以点击对应的头文件自己查阅

7 swift中的缺省和默认function变量在OC中你就别想了,乖乖的写上吧--oc是使用字符串来区分method的

8 关于init(先看一下系统转换自动转化就一目了然)

SWIFT_CLASS("_TtC4ElbF9LogOnline")
@interface LogOnline : NSObjectSWIFT_CLASS_PROPERTY(@property (nonatomic, class, readonly, strong, getter=default) LogOnline * _Nonnull default_;)
+ (LogOnline * _Nonnull)default SWIFT_WARN_UNUSED_RESULT;- (nonnull instancetype)init SWIFT_UNAVAILABLE;
+ (nonnull instancetype)new SWIFT_DEPRECATED_MSG("-init is unavailable");

9 关于enum转化(我们只查看实例)

typedef SWIFT_ENUM(NSInteger, LogLevel, closed) {  LogLevelInfo = 0,  LogLevelError = 1,  LogLevelWarn = 2,
};typedef SWIFT_ENUM(NSInteger, LogMode, closed) {  LogModeDebug = 0,  LogModeProduct = 1,
};

从 8、9我么看出swift集成到OC是经过编辑器自动优化,并且带有浓厚的swift声明

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大话swift 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • swift 与现有OC项目混编
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档