写在前面: 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 为后缀的桥接文件
注意: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更新:
1.若需要自行创建桥接文件,创建好文件后需将文件拉至图中1处(让Xcode知道桥接文件的路径)
2.OC调用Swift使用的头文件名称为图中2指向处名称。