美文网首页
OC中嵌入swift进行混编

OC中嵌入swift进行混编

作者: 搞好关系 | 来源:发表于2018-11-27 14:35 被阅读44次

    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 : NSObject
    SWIFT_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声明

    相关文章

      网友评论

          本文标题:OC中嵌入swift进行混编

          本文链接:https://www.haomeiwen.com/subject/uypgqqtx.html