Swift和Objective-C混编
最近在写一个Swift项目,学习过程中遇到了一些问题。首先面临的就是Swift和Objective-C混编的问题。因为博主用Objective-C的时间久了,而且目前Swift的三方库发展时间还短,并没有像Objective-C那么丰富,所以以前项目中经常使用的一些三方库比如:MJRefresh、SDWebImage 等,一时间也没有找到好的Swift版来替代,所以该篇博文记录了一些Swift和Objective-C混编的一些问题。
1.编辑Podfile文件
使用Xcode打开Podfile文件,加入将要使用的三方库,比如MJRefresh,然后执行pod install
|
|
2.建立桥接文件
简单的做法是直接在Swift工程中新建Objective-C文件,Xcode会自动提示你是否创建bridging header
桥接头文件,点击创建后Xcode会自动为你创建一个桥接头文件,并完善桥接路径。新建的Objective-C文件需要的话可以保留,不需要直接Move to Trash即可。
当然也可以直接commend + N 新创建一个Header File
,命名为ProjectName-Bridging-Header.h
并在Building Settings中自己设置桥接头文件的路径
3.注意
如果在Podfile文件中加入了use_frameworks!
,那么在桥接头文件中可以不导入Objective-C三方库的头文件,直接在使用的文件中导入就可以。否则的话必须在桥接头文件和使用的地方导入该三方库,必须包含三方库文件夹名称,比如:#import "MJRefresh/MJRefresh.h"
Objective-C调用Swift
1.编辑Podfile文件
同样需要在Podfile文件中加入三方库和use_frameworks!
|
|
2.导入Swift库头文件
Xcode会自动为Project生成头文件以便在Objective-C中调用。
在Objective-C类中调用Swift,只需要#import "moduleName-Swift.h"
即可调用,Xcode提供的头文件以Swift代码的模块名加上-Swift.h为命名。
在这个头文件中,将包含Swift提供给Objective-C的所有接口、Appdelegate及自动生成的一些宏定义
3.注意
moduleName-Swift.h在Xcode中是无法搜索查看的,只能从import中点击进去查看。
在大部分情况下,Objective-C都可以无缝地调用Swift,但是由于Swift相对于Objective-C多了一些新特性,比如泛型、元组、枚举的等,所以Swift暴漏给Objective-C的接口多了一些限制,因此Swift只能暴露在Objective-C中有效的接口。
原文地址:https://www.cnblogs.com/petewell/p/11597618.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 小解c# foreach原理
- 多包依赖管理--Lerna
- Flume概述
- Flume中常见的组件
- 程序员进阶之算法练习(四十八)LeetCode
- [C#]不通过事件方式获取键盘按钮按下的状态
- 15.深入k8s:Event事件处理及其源码分析
- SwiftUI:使用计时器重复触发事件
- SwiftUI:获取应用进入后台的通知
- Windows格式化namenode报错 - Error: JAVA_HOME is incorrectly set. Please update F:hadoopconfhadoop-e...
- Windows格式化namenode报错 - ERROR namenode.NameNode: Failed to start namenode.
- Windows启动HDFS报错 - 系统找不到文件 hadoop。
- Windows启动HDFS报错 - org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
- Windows启动HDFS报错 - Could not locate Hadoop executable: E:soft_workhadoop-2.6.0binwinutils.exe
- Windows中jps命令无法查看java进程问题