OC项目混编Swift
OC项目创建第一个Swift文件的时候会提示创建桥接文件,我们选择Create Bridging Header
//桥接文件固定格式:wenDao-Bridging-Header.h(wenDao为项目名称)
//在桥接文件 导入 原pch要导入的全局 引用
Targets -> Build Settings -> Packaging 中设置Defines Module 为YES //可选
创建SViewController.swift
class SViewControllera: UIViewController {
@objc var name: String = ""
@objc func onClickEatAct() {
print(name)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
onClickEatAct()
}
}
// 在OC中使用SViewController.swift
//#import "wenDao-Swift.h" //项目名-Swift.h
SViewController *vc = [[SViewController alloc]init];
vc.name = @"lhw";
[vc eat];
[self.navigationController pushViewController:vc animated:YES];
//如果误删桥接文件,重新创建一个
//如果未选Create Bridging Header,重新创建或导入swift,选则下就好了
OC项目混编Swift优缺点
缺点1、Swift 文件增改,不能实时编译到 OC中,要强写让后编译,才有正确提示。(#import "wenDao-Swift.h" 更新成功后才有提示)
1、swift要继承OC所有pch方法,最简单暴力:在桥接文件wenDao-Bridging-Header里导入,所有pch类
1、swift类的方法和属性 要在OC中使用 得加@objc修饰
2、swift的deinit 取代 OC的dealloc
3、swift 分类自动全局引用,用public 修饰属性
4、swift不能使用OC宏
5、swift类方法有“class”或“static”修饰、对象方法则无
6、Swift 中的属性没有对应的实例变量,属性的后端存储也无法直接访问。
7、swift中不需要 import
8、枚举:和 C 和 Objective-C 不同,Swift 的枚举成员在被创建时不会被赋予一个默认的整型值
9、其他编程语言所不同的是,Swift 并不要求你为自定义类去创建独立的接口和实现文件。你所要做的是在一个单一文件中定义一个类,系统会自动生成面向其它代码的外部接口。
10、OC中类是唯一能定义方法的类型,swift中 类/结构体/枚举 上定义方法都可以
1、swift 不能继承自定义OC类
OC项目混编Swif(bug-新swift不能编译到xxx-Swift.h里)
把旧的swift文件都删除,重新导入新的swift,会提示创建桥接文件,我们选择Create Bridging Header
Swift项目混编OC
当在Swift中使用OC文件的时候,只需在桥接文件即projectName-Bridging-Header.h文件中引入需要的头文件。
具体使用,按照对应的Swift语法结构来即可。