美文网首页
Swift与OC混编开发以及注意点

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

作者: 紫金飞侠雷 | 来源:发表于2018-08-01 11:06 被阅读13次

    混编分为两种情况:

            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,然后配置文件路径。

            2.添加引用

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

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

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

        注意点:

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

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

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

    注意点:

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

    这个是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混编开发以及注意点

          本文链接:https://www.haomeiwen.com/subject/nuylvftx.html