OC与Swift混编②

作者: 三分慢先森 | 来源:发表于2016-09-14 14:10 被阅读127次

    写在前面: Swift 代码访问 Objective-C 代码,或者反之。导入外部框架时,请先确保 TARGETS --> Build Settings --> Packaging --> Defines Module 设置为 Yes。

    在一个工程中导入一些 Objective-C 文件供 Swift 代码使用时,你需要依赖与 Objective-C 的桥接头文件(Bridging-Header)来暴露给 Swift。当你添加 Swift 文件到现有的 Objective-C 工程(或反之)时,Xcode 会自动提示是否创建桥接文件,点击Yes即可创建以 Bridging-Header 为后缀的桥接文件


    20160726185623280.png

    注意:1.确保在 Build Settings
    -> Objective-C Bridging Header 中设置桥接文件的自身真实路径(文件夹中的路径),而不是它所在的目录,如 工程名/桥接文件名。
    2.TARGETS --> Build Settings --> Embedded Content Contains Code 设置为 Yes。

    **Swift 调用 OC : **
    1.在桥接文件中导入你需要使用的OC头文件,即可在整个工程下的Swift文件中用swift的语法使用OC的代码,就像使用系统自带的Swift类一样。
    若 #import "xxxxx.h" 时提示 "xxxxx.h" file not found 则设置 xxxxx.h 文件的Target Membership 为 Public

    ***OC 调用 Swift : ***
    1.在 swift 类名前加上 @objc 关键字 ,如果不行,在@objc后再加上 public 关键字。(我使用时单加一个 public 关键字是没有问题的)
    2.在需要调用Swift的OC类中导入 #import "Product Mould Name -Swift.h",当这样导入提示:file not found 时,尝试将头文件改为: #import "Product Mould Name/Product Name -Swift.h" 。
    Product Name 和 Product Mould Name 可以在工程下 TARGETS --> Build Settings --> Packaging 条目下找到,导入上面Swift.h 的头文件后可以使用工程下所有的Swift类,前提是要满足第1点。
    CMD + 左键 点击进入Swift.h 的头文件,你会发现原有的被 public 修饰的 Swift 类已被自动编译成 OC的代码安静的躺在那里等你调用(如果已经在需要的类名前加上 public 修饰,还是没有发现那个类,请 CMD+B编译一下),需要调用Swift 的属性也是一样的道理。

    注意!!!
    注意!!!
    注意!!!

    2017.6.2更新:

    Setting.png

    1.若需要自行创建桥接文件,创建好文件后需将文件拉至图中1处(让Xcode知道桥接文件的路径)
    2.OC调用Swift使用的头文件名称为图中2指向处名称。

    相关文章

      网友评论

        本文标题:OC与Swift混编②

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