如何在Swift的代码中使用OC的代码, 在OC的代码中使用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.
第二步:确保Product module name 设置为项目工程的名字(在Xcode7中,默认就是工程的名字)
第三步:在OC文件中导入 ”项目名-Swift.h” 例如:#import “test-Swift.h” ,另外注意这个.h文件是系统自己创建的,并不需要手动创建,
并不需要导入需要使用的.Swift文件本身,只要确保导入了第三步中的文件,所有的Swift文件就全部可以直接使用。
二、Swift的代码中使用OC代码.
- 当你在Swift代码中引用OC,需要依赖一个桥接文件,作用是将OC的文件暴露给Swift,然而创建这个桥接文件有两种方式:
当你在Swift项目中创建OC文件时,系统提示你创建Objective-C bridging header.h文件点击YES就OK了,
建类完成之后,项目中会多出一个文件 工程名-Bridging-Header.h 如下图:
自己手动创建桥接文件项目名-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, width: 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了.
define module.png
1. 2 创建桥接文件
桥接文件可以在你创建swift文件的时候Xcode自动生成,也可以自己手动创建,手动创建也就是一个头文件(.h文件).
这里需要说明一点的是,在oc项目中创建的swift文件必须都要继承自NSObject基类,而你自己想要创建的一些类可以这样来创建:
创建步骤1
1.png
创建步骤2
2.png
创建步骤3
这里选择Create Bridging Header,如果不选的话,那就自己手动创建,然后指定索引位置
3.png
创建步骤4
4.png
第三步中如果没有创建桥接文件的话,手动创建一个桥接文件,然后build setting 中搜索 Objective-C Bridging Header,将你手动创建的桥接文件路径输入进去
桥接文件设置
桥接文件设置
1.3 swift中调用oc文件
现在基本上可以实现swift调用oc中代码了,首先在桥接文件中导入你想在swift中用到的oc类
导入oc类
导入oc类
使用oc中的类
1. 4 oc中调用swift文件
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或者动态库使用use_frameworks
下面手动导入Alamofire作为例子:
1)首先下载Alamofire项目源码,解压
Alamofire项目源码
可以删除多余的不需要的文件,比如Example文件夹,等等
2)将Alamofire项目整个拖到你的项目中
拖到自己项目中
3)在Embedded Binaries中添加Alamofire.framework
Embedded Binaries中添加Alamofire.framework
这样就可以cocoapods管理OC第三方库,swift第三方库手动管理,实现不同第三方框架的调用.
作者:偶尔登南山
链接:https://www.jianshu.com/p/a663f51ed61a
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?的更多相关文章
- 关于C、OC、C++、OC++、Swift的一些常识
关于C.OC.C++.OC++.Swift的一些常识 OC是C语言的一个超集,是一门面向对象的语言,因为苹果的崛起而火,API主要是cocoa(OSX)和cocoatouch(iOS),GCC 和 C ...
- Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)
自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...
- C#中创建、打开、读取、写入、保存Excel的一般性代码
---转载:http://hi.baidu.com/zhaocbo/item/e840bcf941932d15fe358228 1. Excel对象微软的Excel对象模型包括了128个不同的对象,从 ...
- 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)
引用 前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果.一:分析题目 从题中可以看到“很大的List”以及“ ...
- 完成代码将x插入到该顺序有序线性表中,要求该线性表依然有序
#include <stdio.h> #include <malloc.h> int main(void) { int i, n; double s = 1.3; double ...
- VS中,添加完Web引用(WebServer引用/Web服务引用),写代码时引用不到
VS中,添加完Web引用(WebServer引用/Web服务引用),写代码时引用不到 添加完之后要等一会儿 等一会儿 等一会儿 就有了
- 4.3.6 对象的界定通过编写接口来访问带这类命名结构的表会出问题。如前所述,SQL Server的灵活性不应用作编写错误代码或创建问题对象的借口。 注意在使用Management Studio的脚本工具时,SQL Server会界定所有的对象。这不是因为这么做是必须的,也不是编写代码的最佳方式,而是因为在界定符中封装所有的对象,比编写脚本引擎来查找需要界定的对象更容易。
如前所述,在创建对象时,最好避免使用内嵌的空格或保留字作为对象名,但设计人员可能并没有遵守这个最佳实践原则.例如,我当前使用的数据库中有一个审核表名为Transaction,但是Transaction ...
- VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法。
原文:VS编程,编辑WPF过程中,点击设计器中界面某一控件,在XAML中高亮突出显示相应的控件代码的设置方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net ...
- 模拟jQuery中的ready方法及实现按需加载css,js实例代码
这篇文章介绍了模拟jQuery中的ready方法及实现按需加载css,js实例代码,有需要的朋友可以参考一下 一.ready函数的实现经常用jQuery类库或其他类库中的ready方法,有时候 ...
- html 事件处理程序中的代码在执行时,有权访问全局作用域中的任何代码。
看一个简单的例子: html: <head> <meta charset="UTF-8"> <title>Document</title& ...
随机推荐
- redis长篇介绍
一. 简介 Redis 完全开源免费,遵守BSD协议,高性能的(NOSQL) key-value数据库 BSD 伯克利软件发行版 缓存数据集 所以都在内存上面 Redis 数据类型分为:字符串类型.散 ...
- syx学习笔记
SYX复活了,在悲痛之际,希望能让自己获得更多的知识,更有进步,所以留此博客 数学 推荐blog: 1 2 原根表 FFT(快速傅里叶变换) 2019/12/05 √ 博客 blog 题目 Q1 NT ...
- JavaScript 转义字符
转义字符是字符的一种间接表示方式.在特殊语境中,无法直接使用字符自身.例如,在字符串中包含说话内容. "子曰:"学而不思则罔,思而不学则殆."" 由于 Java ...
- Mybatis注解开发单表CRUD
Mybatis注解开发单表CRUD mybatis注解开发和xml开发不可兼容,要么全部使用注解,要么全部使用xml,个人建议注解,简单. 当实体类属性名称和数据库表属性名称一致时:无需配置Resul ...
- java 寒假作业
寒假作业 现在小学的数学题目也不是那么好玩的. 看看这个寒假作业: □ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □ (如果显示不出来,可以参见[图1.jpg]) 每个方 ...
- ubuntu18.04下neo4j的安装
参考CSDN博客 安装jdk8方式与博客中有不同,按照博客中方法没有成功 以下方法配置环境变量成功 进入配置文件 [root@cuierdan java]# vim /etc/profile在文件的后 ...
- pt-archiver 归档数据
pt-archiver 参数说明pt-archiver是Percona-Toolkit工具集中的一个组件,是一个主要用于对MySQL表数据进行归档和清除工具.它可以将数据归档到另一张表或者是一个文件中 ...
- 2019年第十届蓝桥杯【C++省赛B组】
试题 A: 组队 本题总分:5 分 作为篮球队教练,你需要从以下名单中选出 1 号位至 5 号位各一名球员,组成球队的首发阵容.每位球员担任 1 号位至 5 号位时的评分如下表所示.请你计算首发阵容 ...
- 008.CI4框架CodeIgniter, Controller控制器传输参数到View视图
01. 在CI4中输出VIEW视图,并且传入参数,代码如下: <?php namespace App\Controllers; class Home extends BaseController ...
- Linux间传输文件 scp
scp scp使用ssh来传输数据,使用相同的认证方式,所以配置好ssh后,根据用户名和密码来读写远程文件.基本命令如下,输完命令,回车,输入远程用户对应的密码: 从本机复制到远程: 文件:scp F ...