一、OC调用swift文件

二、swift调用OC文件

三、注意和总结

添加:

四、自定义桥接文件

一、OC调用swift文件

  在OC项目中创建一个swift文件的时候,Xcode 会提示 需要创建一个桥接文件,点确定创建桥接文件,Xcode会自动创建一个桥接文件

名字:工程名-Bridging-Header.h

这个桥接文件是 swift 调用OC文件的时候用的

1、

  进入TARGETS ->Build Settings -> Packaging 中

设置Defines Module为YES

设置 Product Module Name ,也可以不设置,默认为工程的名字。这个在后面会用到

2、

  在swift写一个类

注意这个类一定要继承NSObject,不然在OC中没法用

class hello: NSObject {
    var address : String
    var gender: String
   
    init(address:String,gender:String){
        self.address = address
        self.gender = gender
    }
   
    func method() {
        print("message \(self.address + self.gender)")
    }
}

3、

  在OC需要用到的swift文件中 导入文件 "Product Module Name -Swift.h"  因为 Product Module Name 默认是工程的名字

所以直接导入 #import "工程名-Swift.h"

4、

  记着写完先command +B编译一下,如果没有报错就可以在OC文件调用swift中的类了

hello *helloss = [[helloalloc]initWithAddress:@"上海"gender:@"男"];
[helloss method];

二、swift调用OC文件

  在swift项目中创建一个OC文件的时候,Xcode 会提示创建一个桥接文件 点确定创建桥接文件,Xcode会自动创建一个桥接文件

名字:工程名-Bridging-Header.h

  把swift需要用到的OC文件的头文件放到桥接文件里 工程名-Bridging-Header.h

例如:

1、

这个就是一个OC文件
//#import "sec.h"
#import <UIKit/UIKit.h>
@interface sec : UIViewController
-(void)actionMake;
@end
 

2、

在桥接文件中把需要用到OC的头文件导入进去
#import "sec.h"
 

3、

编译一下,就可以在swift中用swift的语法调用OC文件的方法了
let second = sec()
second.actionMake()

三、注意和总结

注意:

1、OC项目在导入swift文件前 先按照系统提示创建桥接文件,
2、在 targets -> Build Settings -> Packaging  中设置Defines Module 为YES
3、在OC中调用swift文件的时候,swift中的类 要继承NSObject
不然没办法在OC中调用
4、OC中调用swift文件需要导入”工程名 -Swift.h"
     (这个是build Setting -> Packaging->Product Module Name 的名字,而这个属性默认是工程的名字)
5、写完记得command + B 编译 一下
6、swift项目 引用OC文件也需要创建 桥接文件,在这个桥接文件中导入OC文件的头文件
7、桥接文件只有一个,作用只是为了 swift 引用OC文件,OC引用swift 文件虽然也需要创建桥接文件
        但是不需要在桥接文件中 导入swift文件
8、如果一个项目既有OC引用swift 也有swift引用OC ,就先设置swift调用OC文件
     在桥接文件 导入OC文件,OC可以定义PCH文件导入”工程名 -Swift.h" 

四、自定义桥接文件

如果不用Xcode提示创建桥接文件也可以自定义一个桥接文件
1     使用 Header File  把里面的内容清空。
2、 这文件名可以自定义, 一般还是用 工程名-Bridging-Header.h   例如app - file.h
3    然后在 Build Setting -> Swift Compiler - Code Generation中
4、设置Objective-C Bridging Header 为自定义的桥接文件相对于工程的绝对路径,也就是项目总文件夹的路径,如果在第一层,就直接写自定义的桥接文件的名file.h,如果在下一层,文件夹/桥接文件 app/file.h 

OC与swift相互调用的更多相关文章

  1. iOS OC与swift相互调用

    小哥("我"的自称)个人混编的时候喜欢先创建OC项目,然后在项目中创建swift类.这样有个好处就是桥文件可以自动创建的同事路径不需要我手动去写了,另外还有个目的就是现在小哥自我感 ...

  2. JS与原生OC/Swift相互调用总结

    代码地址如下:http://www.demodashi.com/demo/12754.html JS-OC-Swift JS和OC/Swift相互调用,主要总结了JS和OC交互的三种方式 1.使用UI ...

  3. JS代码和OC代码的相互调用

    JS调用OC 很多应用里面或多或少的调用了网页,来达到绚丽的效果,所谓的JS调用OC.....举个例子吧,网页上有个按钮 点击按钮跳转界面,跳转的动作由OC的代码实现. OC调用JS 还是举个例子,我 ...

  4. swift和oc之间的相互调用(block,代理)

    第一:swift->oc 这个相对简单一点, 在自动生成的桥接文件中导入你要掉的oc文件名就可以了, 如果没有生成桥接文件也可以自己手动创建(Header File) 第二:oc->swi ...

  5. iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包

    本文章将从两个方向分别介绍 OC 与 swift 混编 1. 第一个方向从 swift工程 中引入 oc类 1. 1 如何在swift的类中使用oc类    1.2  如何在swift中实现oc的代理 ...

  6. [Swift]在Swift项目中创建桥接头文件,Swift文件和Objective-C文件相互调用

    创建一个Swift项目[demo],以下内容Swift文件和Objective-C文件相互调用都是在Swift项目中. 一.Swift文件调用Objective-C文件 新建文件夹[SupportFi ...

  7. iOS OC和Swift进行互相调用

    有时候 ,我们会涉及到双向混合编程,特别是OC和swift的互相引用. swift调用oc的方法: 1.桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2 ...

  8. Lua 与 OC 相互调用

    本文主要讲如何完成lua和object-c的相互调用.       lua是一种脚本语言,可以方便的移植到各种宿主语言中,并且可以支持热更新,在游戏开发中也能当做主要的语言来编写游戏的逻辑,但是要接入 ...

  9. swift与OC混编之调用函数

    在桥接头文件里#import oc的.h文件,整个swift工程都能使用该oc文件,在.h里暴露的方法都能被该工程使用 //oc文件 TestOC.h #import @interface TestO ...

随机推荐

  1. 帝国CMS排行榜调用标签

    [e:loop={0,9,4,0,'newstime>UNIX_TIMESTAMP()-86400*30','onclick desc'}]<li><a href=" ...

  2. m4a 转MP3

    import os for filename in os.listdir(r'.'): print filename os.rename(filename,filename.replace(' ',' ...

  3. GIS地理处理脚本案例教程——批量栅格分割-批量栅格裁剪-批量栅格掩膜-深度学习样本批量提取

    GIS地理处理脚本案例教程--批量栅格分割-批量栅格裁剪-批量栅格掩膜-深度学习样本批量提取 商务合作,科技咨询,版权转让:向日葵,135-4855_4328,xiexiaokui#qq.com 关键 ...

  4. Python模块安装方法

    安装Python模块 电子邮件 distutils-sig @ python .组织 作为一个受欢迎的开源开发项目,Python具有活跃的贡献者和用户支持社区,并且根据开放源代码许可条款,其软件可供其 ...

  5. How to disable the JSP validation in Eclipse helios?

    java - How to disable the JSP validation in Eclipse helios? - Stack Overflowhttps://stackoverflow.co ...

  6. CEF 远程调试

    转载:https://www.cnblogs.com/TianFang/p/9906786.html 转载:https://stackoverflow.com/questions/29117882/d ...

  7. visual studio(vs)初始化

    cmd 进入到 devenv.exe 所在目录 执行一下命令 devenv.exe /setup /resetuserdata /resetsettings

  8. 【原创】MongoDB安装配置详解(标注两个坑)

    1.下载安装 3.4正式版([坑]不要最新版,有可能进度卡在这个位置不动,等了半个小时也没什么反映,) http://downloads.mongodb.org/win32/mongodb-win32 ...

  9. 【Log】logback实现每个类和包自定义级别输出

    本例想实现对类或者包中的日志,自定义级别输出 方法一 1.自定义日志级别方式如下: 代码文件:Logger monitorLogger = LoggerFactory.getLogger(" ...

  10. ubuntu下MySQL忘记密码重置方法

    方法一: 1):编辑mysqld.cnf文件 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 2):在文件中的skip-external-locking一行的下面 ...