Swift与OC混编开发以及注意点

混编分为两种情况:

        1.在Swift工程中使用Objective-C文件

        2.在Objective-C工程中使用Swift的文件

Swift中访问OC文件:

        1. 添加桥接文件projectName-Bridging-Header.h

           桥接文件“ProjectName-Bridging-Header.h”,在首次创建其他文件的时候,会自动生成。如果不小心删除后,也可以手动添加,不过名字必须是“ProjectName-Bridging-Header.h”头文件(名称组成:工程名-Bridging-Header.h)。

           在Targets->Bulid Setting,然后搜索Swift,选择Swift Compiler-General下Objective-C Bridging Header,然后配置文件路径。

Swift与OC混编开发以及注意点_第1张图片

        2.添加引用

            Swift中使用OC文件的时候只需要在桥接文件projectName-Bridging-Header.h中引入需要的头文件。

            我们项目中对应的桥接文件为:X5mgc-Bridging-Header.h 

Swift与OC混编开发以及注意点_第2张图片

               这样就可以在.Swift文件中访问OC的类了,如下:

Swift与OC混编开发以及注意点_第3张图片

    注意点:

        1、使用第三方Framework

            设置: target-->build setting -->Packaging -->Defines Module为 “Yes”;

            然后,配置文件Target -> Build Phases -> Link Binary,添加要导入的Framework;

            最后,还是要配置桥接文件,比如要使用 abc-lib.framework库中的 abc.h 就要这样配置:#import"abc-lib/abc.h"; 

        2、OC宏文件

            Swift中没有宏,可以使用全局常量、全局函数代替部分宏问价

            Swift中是不能使用宏定义语法,但是因为命名空间的缘故,在其中,我们将原本oc中不需要接受参数的宏,定义成let常量或枚举,将需要接受参数的宏定义成函数。

   OC中访问Swift类:

            1、首先我们创建一个OC项目,然后再OC项目中创建一个Swift类,如下:

Swift与OC混编开发以及注意点_第4张图片

              如果你是第一次在工程中创建 Swift 类,工程会提示你是否需要创建 Objective-C bridging header,这个就是所谓的桥接文件。点击 Create Bridging Header,此时会在你的工程中多出一个文件(文件命名规则是:工程名-Bridging-Header.h)

Swift与OC混编开发以及注意点_第5张图片
Swift与OC混编开发以及注意点_第6张图片

        2、在OC类中引用刚才创建的Swift类

                在想要调用Swift代码的类中导入Swift头文件,这个是固定的写法(规则是:工程名-Swift.h),然后就可以调用我们刚才的 Swift 代码了。

Swift与OC混编开发以及注意点_第7张图片

注意点:

        1、工程名-Swift.h这个文件虽然看不到,但是它是真是存在的,编译后,你可以按住Command+单击该文件名,就会看到具体生成的代码。

Swift与OC混编开发以及注意点_第8张图片
这个是SwiftModel生成的对应OC代码。

        2、对于需要混编的Swift类需要添加@objc声明或者继承NSObject或者是NSObject的子类。否则,引入 工程名-Swift.h之后,程序找不到对应类。

        3、直接拖动对应的Swift文件到工程的话,好像直接拖动添加.swift文件到工程Xcode不会添加到编译列表中,因此要注意检查拖动的文件是否添加到了build phase的编译列表中。

         4、OC项目混编Swift的时候,如果项目没有自动生成桥接文件(ProductName-Bridging-Header.h),那么你一定要自己创建并配置好路径。因为:没有桥接文件会影响到你的Swift转OC接口文件(ProductName-Swift.h)中Swift要暴露给OC生成的接口。 

          5、Swift中有许多OC没有的特性,比如,Swift有元组、泛型、定义的结构体、还有特有的枚举类型。所以,要使用的混编文件要注意Swift独有属性问题。

你可能感兴趣的:(Swift与OC混编开发以及注意点)