如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?

摘要:
)5、 OC代理方法的使用将自动将第三方方法转换为swift方法,因此您仍然可以使用swift方法调用!

https://www.cnblogs.com/upliver/p/5138160.html

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?

随着苹果公司对Swift的推广力度不断加大,市场上很多的项目都在逐步的转向使用Swift开发,但由于各种原因,公司不可能一时间直接冲OC转向Swift,因此中间就会有一个过渡期,需要我们程序员进行OC和Swift两种语言之间进行混合编程.下面我就给大家介绍一下,混编之前我们应该怎么配置.

一、OC的代码中使用Swift代码.

  • 第一步: 在工程的Build Settings 中把Defines module 改为YES.

    如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第1张
  • 第二步:确保Product module name 设置为项目工程的名字(在Xcode7中,默认就是工程的名字)

    如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第2张
  • 第三步:在OC文件中导入 ”项目名-Swift.h” 例如:#import “test-Swift.h” ,另外注意这个.h文件是系统自己创建的,并不需要手动创建,

并不需要导入需要使用的.Swift文件本身,只要确保导入了第三步中的文件,所有的Swift文件就全部可以直接使用。

二、Swift的代码中使用OC代码.

  • 当你在Swift代码中引用OC,需要依赖一个桥接文件,作用是将OC的文件暴露给Swift,然而创建这个桥接文件有两种方式:
    1. 当你在Swift项目中创建OC文件时,系统提示你创建Objective-C bridging header.h文件点击YES就OK了,

      如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第3张

      建类完成之后,项目中会多出一个文件 工程名-Bridging-Header.h 如下图:

      如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第4张

    2. 自己手动创建桥接文件项目名-Bridging-Header.h

    注意:自己创建这个桥接.h文件的时候,一定要严格按照“项目名-Bridging- Header.h”的格式创建文件。

swift使用OC第三方库配置流程以及使用方法

https://blog.csdn.net/xiaoxiaocode/article/details/80114481

2018年04月27日 22:49:29 xiaoxiaocode 阅读数:553

在swift开发过程中我们难免会使用一些OC的开源库来附注项目开发。这就涉及到OC和swift的混编了,正好本人最近也在模仿斗鱼直播的项目,自己也使用了OC的第三方库,今天就给大家介绍一下自己的使用过程。

一、导入第三方库

这里需要注意点,我使用pod导入OC的第三方库SDCycleScrollView,然后进行配置出现找不到SDCycleScrollView的错误,最后还是直接复制SDCycleScrollView到项目中才解决的问题,这一点还不知道为什么,希望清楚的这个问题的同学指正。

二、创建头文件

创建一个头文件,然后将SDCycleScrollView.h文件导入到头文件中。

创建头文件

导入头文件

三、配置桥接头文件

在Build Setting里面搜索bridging,然后向Objective-C Bridging Header中添加我们创建的头文件的地址,如下图:

配置头文件

四、使用OC方法

还是使用swift的方法调用就可以。

let imageNames = ["1.png", "2.png", "3.png", "4.png","5.png"]

let cycleScrollView = SDCycleScrollView.init(frame: CGRect (x: 0, y: 0, self.view.frame.size.width, height: 200), shouldInfiniteLoop: true, imageNamesGroup: imageNames)

cycleScrollView?.delegate = self

self.view.addSubview(cycleScrollView!)

五、OC代理方法的使用

第三方的方法会自动转成swift的方法,所以只要还是使用swift的方法调用就可以啦!

/*

1、按照swift的代理执行方式来就可以。

*/

extension RecommendVC : SDCycleScrollViewDelegate{

//图片滚动回调

func cycleScrollView(_ cycleScrollView: SDCycleScrollView!, didScrollTo index: Int) {

print("图片滚动回调(index)")

}

//点击图片回调

func cycleScrollView(_ cycleScrollView: SDCycleScrollView!, didSelectItemAt index: Int) {

print("点击图片回调(index)")

}

}

iOS中Objective-C和Swift混编及第三方框架相互调用

https://www.jianshu.com/p/a663f51ed61a

本文将详细介绍一下OC和swift混编问题,其中涉及两大部分:1)oc项目中混编swift的实现; 2)oc或者swift第三库的导入及使用.

1 oc项目中混编swift

在oc项目中想要使用swift,并且实现相互调用,需要一些基本的设置,桥接文件也是必须得.

1. 1 基本设置支持swift

在bulid setting中找到 Packaging 下的 define module,将是否定义模块布尔值改成YES,这样OC就可以支持swift了.

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第8张

define module.png

1. 2 创建桥接文件

桥接文件可以在你创建swift文件的时候Xcode自动生成,也可以自己手动创建,手动创建也就是一个头文件(.h文件).

这里需要说明一点的是,在oc项目中创建的swift文件必须都要继承自NSObject基类,而你自己想要创建的一些类可以这样来创建:

创建步骤1

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第9张

1.png

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第9张

创建步骤2

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第11张

2.png

创建步骤3

这里选择Create Bridging Header,如果不选的话,那就自己手动创建,然后指定索引位置

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第12张

3.png

创建步骤4

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第13张

4.png

第三步中如果没有创建桥接文件的话,手动创建一个桥接文件,然后build setting 中搜索 Objective-C Bridging Header,将你手动创建的桥接文件路径输入进去

桥接文件设置

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第14张

桥接文件设置

1.3 swift中调用oc文件

现在基本上可以实现swift调用oc中代码了,首先在桥接文件中导入你想在swift中用到的oc类

导入oc类

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第15张

导入oc类

使用oc中的类

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第16张

1. 4 oc中调用swift文件

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第17张

oc中调用swift文件

2 oc和swift第三方库的使用

如果你的项目用cocoapods来管理你使用的第三方库,并且OC项目中已经集成了多个第三方库,那么这时你想在导入swift编写的第三方库,这时你不能用cocoapods管理第三方库了,因为Swift连接时不支持静态库,cocoapods也在其Podfile中有说明:

Uncomment the next line if you're using Swift or would like to use dynamic frameworks

use_frameworks!

翻译过来就是:如果你想使用swift或者动态库,就把下面一行注释打开

然而打开后你是编译不过去的,这时需要手动导入swift库

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第18张

使用swift或者动态库使用use_frameworks

下面手动导入Alamofire作为例子:

1)首先下载Alamofire项目源码,解压

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第19张

Alamofire项目源码

可以删除多余的不需要的文件,比如Example文件夹,等等

2)将Alamofire项目整个拖到你的项目中

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第20张

拖到自己项目中

3)在Embedded Binaries中添加Alamofire.framework

如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?第21张

Embedded Binaries中添加Alamofire.framework

这样就可以cocoapods管理OC第三方库,swift第三方库手动管理,实现不同第三方框架的调用.

作者:偶尔登南山

链接:https://www.jianshu.com/p/a663f51ed61a

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

免责声明:文章转载自《如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇安装纯净版xp,,优盘装系统提示INF file txtsetup.sif的解决方法【终极指南】图文详解Chrome插件离线安装方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iOS OC和Swift进行互相调用

有时候 ,我们会涉及到双向混合编程,特别是OC和swift的互相引用。 swift调用oc的方法: 1、桥接文件,一般是swift工程,在创建一个oc文件时,系统自动添加(不用改名,直接默认即可) 2、将需要引用的oc文件 .h头文件 添加到桥接类中。 如下: 然后在swift调用处,直接就可以使用了。 oc调用swift的方法: 1、首先设置一下Pac...

iOS ——OC——继承关系的理解和子类对父类方法的使用

一.继承: 子类可以直接复用父类中的成员.子类继承父类所有方法的声明和实现 非私有的实例变量以及协议 继承时要在.h中声明一下 继承具有单根性和传递性 继承的根类:大多都继承自 NSObject 类,所以在定义一个类时,要继承NSObject 类。 继承就是代码优化公共部分交给父类 例如: (Person是父类Worker 和Worker都继承了Per...

OC基础 代理和协议

OC基础 代理和协议 1.协议 (1)oc语言中得协议:一组方法列表,不需要我们自己实现,由遵守协议的类来实现协议所定制的方法。 (2)协议的使用步骤:制定协议-->遵守协议-->实现协议-->调用协议。 (3)协议声明的关键字: (a)@required,必须实现,不实现的话在.m文件内会报警告。 (b)@optional,可选实现,不...

Virtualbox虚拟机安装与设置

Virtualbox与VMware类似,都是虚拟机软件,在win10下安装Virtualbox直接默认安装即可。版本:VirtualBox-5.2.0-118431-Win.exe 安装完成后,点击左上角,新建,以安装win2008为例,设置win2008相关参数,直接创建win2008虚拟机,虚拟机的安装文件:cn_windows_server_2008...

OC对象的动态和静态构造区别

Student.h: #import <Foundation/Foundation.h> @interface Student : NSObject @property(nonatomic,retain) NSString * name; @property(nonatomic,assign) int age; @end Studen...

Ubuntu12.04 配置KVM,使用网卡桥接模式。

以前因为Ubuntu Server 做 kvm 没有解决网卡桥接,就改了Centos6。Centos6配置桥接倒是比较容易,对 Virtual Machine Manager支持也很好,但是偏偏只能用root管理虚拟机,这非常不理想(后经人指点,可以用sudo为普通用户分配权限,有点麻烦)。 现在重新尝试配置Ubuntu Server 网卡桥接,发现其实很...