swift之OC与Swift混编

1、在Swift工程添加OC代码

在swift语言里,同一个项目内的文件基本会放在同一个命名空间里,所以没有.h文件。如果想在swift工程中添加OC代码,需要解决怎么引用OC代码的头文件问题。具体的解决办法就是:新建一个Header File文件里。

如下图所示,在新建的.h文件里面,添加OC代码的头文件

然后需要在项目部署里面配置该引用文件

这样就可以在swift文件里面按照swift语法来调用OC代码了

2、在OC工程中加入Swift代码

oc里面都有头文件,但是swift没有头文件,因此我们需要产生一个头文件。当你在OC工程里面新建swift文件话,工程会给你自动创建一个比较特殊的头文件。如下图所示,Xcode会根据module Name,生成一个名字为moduleName-Swift.h的文件。

在需要调swift代码的.m文件里面,加入“#import Modulename-Swift.h”,如下图所示。你在整个工程中是找不到这个文件的,但可以使用CMD+鼠标点击可看到这个头文件中的内容。

使用CMD+鼠标点击看到这个头文件中的内容,具体内容如下:

特别要注意的是:用swift写的类,如果不继承自NSObject或者NSObject的派生类,哪么编译后将不会生成对应的转换类,从而使得OC中找不到相应的声明。具体解释可以参考:http://blog.csdn.net/zhzmaren/article/details/53283835。具体写法如下所示:

总之,工程中如果Swift要使用OC,则需要把使用OC类的头文件,全写在SayOO1-Bridging-Header.h文件里面。同样,如果OC中使用Swift类,需要在OC代码里面导入SayOO1-swift.h。

时间: 2024-10-17 03:14:08

swift之OC与Swift混编的相关文章

OC 与 C++ 混编导致的问题

最近项目中用到 std::function.  在导入头文件的时候,发现问题总是报头文件无法找到.但是我通过xcode 跳转都能够跳转到对应的文件了 #include <string.h> #include <functional> 1.一开始以为是 链接库的问题   于是添加 libstdc++.tbd 发现没用. 2.考虑到是否是 文件搜索路径的问题, 经过与 cocos 工程进行对比发现不是这个问题. 3.考虑是否是 编译设置的问题 build setting 里面设置支持

iOS swift 项目 oc 和 swift 混用,文件相互引用

创建swift工程后,如果后面想新建 oc 文件,这时会生成一个  AppName-Bridging-Header.h文件 一,在swift 文件中 1> 引用swift 文件 什么都不需要操作,在所有的swift 文件中,都是可以相互使用的 2> 引用oc 文件 AppName-Bridging-Header.h文件中把要引用的oc头文件导入,然后在所有的 swift 文件中都可以使用这个oc类 二,在oc文件中 1> 引用swift文件 swift 语言创建的工程会自动生成一个 Ap

iOS开发--混编篇&amp;swift与OC混合使用

Swift与OC混合使用 swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编.这个在IOS8中是允许的. 先中简单的入手,先研究在同一个工程目录下混合使用的情况. 为了演示.先准备两个类 第一个是swift语言写的类,文件名为 act.swift [cpp] view plaincopy import Foundation class Act : NSObject { fun

详解swift和OC以及C语言的混编(不看后悔!)

前言: Swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,或者有一些第三方使用OC写的,没有swift版本,怎么办?那就使用混编.这个在IOS8后是允许的. 先简单的入手,先研究在同一个工程目录下混合使用的情况.这里主要介绍swift类中调用OC方法和swift类中调用C函数以及OC类中调用swift的函数这三种类型的混编.另外,小编也是边研究边尝试才做出结果的,因此命名并非规范命名,大

Swift和Objective-C混编注意事项

前言 Swift已推出数年,与Objective-C相比Swift的语言机制及使用简易程度上更接地气,大大降低了iOS入门门槛.当然这对新入行的童鞋没来讲,的确算是福音,但对于整个iOS编程从业者来讲,真真是,曾几何时"高大上",转瞬之间"矮矬穷".再加上培训班横行,批量批发之下,iOS再也看不到当年的辉煌.iOS10推出后,紧跟着Xcode8也推送了更新,细心者会发现,Xcode8下iOS版本最低适配已变为iOS8.0,加上Swift版本趋于稳定,从某种意义上讲,

iOS 静态类库 打包 C,C++文件及和OC混编

iOS 静态类库 编译 C,C++ 我们都知道,OC 原生支持C, 在 创建的 OC类的 .m 里面,可以直接编写C的代码: 同样 Xcode 也支持 OC ,C++的混编,此时,我们通常把OC创建的 .m 文件,手动修改为 .mm 文件以支持 oc c++的混编 基于上面的特性,我们在打包静态类时,可以编译C,OC,C++ 以及三者混合的代码: 因为大多数夸平台的算法库代码都是C或是C++写的,我们利用Xcode编译成静态类库,可以非常安全的提供给别人使用 如下示例: 一:静态库打包 C 代码

Swift、OC、C++混合编程

OC调用C++: 1.创建oc工程: 2.主要步骤:将某个.m文件后缀改为.mm, 3.创建c++文件 #ifndef __Test__CPPHello__ #define __Test__CPPHello__ #include <stdio.h> class CPPHello { public: static void hello(); }; #endif /* defined(__Test__CPPHello__) */ CPPHello.h 1 void CPPHello::hello(

swift混编oc碰到的问题

在swift中混编苹果官方的Reachability OC文件. 因为swift工程的target是生成framework而非app,framework中调用oc与app中使用桥接文件还不一样,参考: http://blog.csdn.net/cooldragon/article/details/50172649 主要步骤为: 1.将Reachablity.m 和.h文件加入到工程中 2.在ESPlus.h 中最后加上 (ESPlus为Framework名称) #import <ESPlus/R

在Swift中实现 oc与swift的混编

在Swift中想要引用OC头文件(import),可采用混编的方法,这里以sqlite为例,采用OC-Swift桥的方式实现添加头文件1引入sqlite数据库的库文件 打开工程配置文件,在build Phases选项标签的第三个选项中添加sqlite3 2.先创建桥文件 command + N键选择创建头文件 写一个名字 将要引入的文件在这个Header桥文件里进行引入就行,即将import 语句写在这里 3 配置桥接文件打开工程配置文件,在build setting选项标签搜索框里输入brid