Objective-C和Swift混编指南

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, 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语法结构来即可。

你可能感兴趣的:(Objective-C和Swift混编指南)