*****阅读完此文,大概需要5分钟******
这个过程不复杂,但是有些问题遇到了可能就会捣弄很久,特此输出此文,希望可以帮助大家快速解决相应的问题。
一、配置步骤
1、主项目中添加工程名-Bridging-Header.h
这一步可以如其他文章介绍的那样,先添加Test.swift然后,Xcode会提醒你添加对应的-Bridging-Header文件的。
2、配置工程
- Build Settings设置Defines Module为Yes
- 设置Podfile,如下:
use_modular_headers!
use_frameworks! :linkage => :static
- Xcode设置Swift版本为最新
二、注意事项以及可能遇到的问题
1、OC中调用Swift代码
import Foundation
@objcMembers
public class MDSwiftDemoViewController : UIViewController {
public override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
}
func show() {
print("hello swift...")
}
}
注意在对应的Swift类前面添加public修饰
如果在OC的调用Swift代码是夸Pod库调用,需要添加对应的引用如下:
#import <SwiftDemoProject/SwiftDemoProject-Swift.h>
2、NSClassFromString等使用注意
如果在OC代码中直接NSClassFromString(“MDSwiftDemoViewController”),得到的结果将会是nil。因为在OC中Swift类中的所有类的接口都转到了一个叫Project_Example-swift.h的头文件中,其中的类名和方法实际都已经改变了,已经不是原来的类名了。解决方法如下:
import Foundation
@objc(MDOCSwiftDemoViewController)
@objcMembers
class MDSwiftDemoViewController : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.white
}
func show() {
print("hello swift...")
}
}
在OC代码中调用MDOCSwiftDemoViewController类即可。
NSClassFromString(“MDOCSwiftDemoViewController”)
3、工程出现”<A/A.h> file not found”报错
参考解决:
检查对于的podspec文件对A的依赖,由于Podfile中配置了static,未添加依赖会导致的头文件引用找不到。
4、遇到 “library not found for -lAFNetworking”报错
参考解决:
Build Setting -> Other Linker Flag 中的引用,找到移除之后的框架,删除引用即可
三、参考文档:
https://www.jianshu.com/p/57fedd74763d