在 OC 中调用 Swift 代码
1、在 Objective-C 项目中使用 Swift 代码
1)在 OC 项目中创建
.Swift文件,文件中的格式为其本有的格式。2)Xcode 提示是否创建 Objective-C bridging 头文件,点击 Yes 创建,Xcode 会自动创建一个桥接头文件,文件名的格式是
项目名-Bridging-Header.h。- 一般情况下,Xcode 辅助生成的桥接头文件在编译属性里已经帮我们设置了引用。
如果没有的话需要自己将其配置到项目中,选中项目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 属性,双击配置成
项目名/项目名-Bridging-Header.h即可。
3)在 OC 的
.m文件中添加头文件#import "项目名-Swift.h",在此文件中直接使用.Swift文件中的类、方法即可。项目名-Swift.h这个头文件是 Xcode 自动产生的。- 如果不是引用外部 Swift 语言编写的框架,不需要我们做过多配置。
但是如果是引用外部框架,需要我们进行配置:选中项目中的 Targets => Build Setting => Packaging => Defines Module 修改成 Yes,然后在 Build Setting => Packaging => Product Module Name,设置一个名称,例如 SwiftInAction。特别注意的是,这个名称不能有
-等字符。这样我们在 OC 的.m文件中就可以添加SwiftInAction-Swift.h了,这个名字是 Xcode 根据设置的模块名自动生成的。
在开始的几次编译或者代码调试中,可能会出错,提示找不到这个自动生成的文件,一般对项目进行 clean 操作可以解决问题,具体是点击 Product 菜单下的 clean 菜单项即可。
2、在 Swift 项目中的 Objective-C 代码中使用 Swift 代码
1)在 Swift 项目中创建 OC 的
.h和.m文件,文件中的格式为其本有的格式。2)Xcode 提示是否创建 Objective-C bridging 头文件,点击 Yes 创建,Xcode 会自动创建一个桥接头文件,文件名的格式是
项目名-Bridging-Header.h。- 一般情况下,Xcode 辅助生成的桥接头文件在编译属性里已经帮我们设置了引用。
如果没有的话需要自己将其配置到项目中,选中项目中的 Targets => Build Setting => Swift Compiler - general => Objective-C Bridging Header 属性,双击配置成
项目名/项目名-Bridging-Header.h即可。
3)在此桥接头文件中添加所创建的 OC/C 文件的引用
#import "*****.h"。4)在
.Swift文件中每一个方法和类名前都加@objc前缀来修饰,以便在 Objective-C 中可以访问。5)在 OC 的
.m文件中添加头文件#import "项目名-Swift.h",在此文件中直接使用.Swift文件中的类、方法即可。项目名-Swift.h这个头文件是 Xcode 自动产生的。- 如果不是引用外部 Swift 语言编写的框架,不需要我们做过多配置。
但是如果是引用外部框架,需要我们进行配置:选中项目中的 Targets => Build Setting => Packaging => Defines Module 修改成 Yes,然后在 Build Setting => Packaging => Product Module Name,设置一个名称,例如 SwiftInAction。特别注意的是,这个名称不能有
-等字符。这样我们在 OC 的.m文件中就可以添加SwiftInAction-Swift.h了,这个名字是 Xcode 根据设置的模块名自动生成的。
3、在 Objective-C 里使用 Swift 限制
1)一些 Swift 特有的类型,例如元组、泛型、类型别名、嵌套类型等,不能在 Objective-C 里使用。
2)不能在 Objective-C 里继承 Swift 类型。
3)数据类型之间需要互相映射关联。
- Objective-C 核心类型到 Swift 中的替代类型,例如
NSString到String。 - Objective-C 确定类型到 Swift 中的同等类型,例如
id到AnyObject。 - Objective-C 概念到 Swift 中相匹配的概念,例如
pointers到optionals。
- Objective-C 核心类型到 Swift 中的替代类型,例如
4)不能直接把 C++ 代码导入 Swift,解决办法是为 C++ 代码创建一个 Objective-C 或者 C 的封装。
在 OC 中调用 Swift 代码的更多相关文章
- 在OC中调用Swift类中定义delegate出现:Property 'delegate' not found on object of type ...
找了许久没找到答案, 在下面的链接中, 我解决了这个问题: http://stackoverflow.com/questions/26366082/cannot-access-property-of- ...
- Swift基础之OC文件调用Swift代码(在上次的基础上写的)
前两天刚写过Swift调用OC,今天在原来的基础上,实现OC调用Swift. 首先,创建一个OneSwiftFile.swift文件,创建一个继承于NSObject的类(这个地方你可以自己选择继承的父 ...
- 在Objc项目中调用Swift
之前的文字中记录了在Swift项目中调用OC的相关代码,比较简单直接 传送门 但是在OC中调用swift代码则不是那么的和谐,网络上很多文章业已经有点陈旧.记录步骤如下: 1.创建OC项目 (1)启动 ...
- 如何在C语言中调用Swift函数
在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中 ...
- 如何在Java中调用Python代码
有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...
- C#中调用PowerShell代码
在C#中调用PowerShell代码,很多时候Add是不好使的!要用AddScript!记录一下! using (Runspace runspace = RunspaceFactory.CreateR ...
- 在Java中调用Python代码
极少数时候,我们会碰到类似这样的问题:与A同学合作写代码, A同学只会写Python,不熟悉Java ,而你只会写Java不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方 ...
- iOS OC中桥接swift第三方库
swift中有一些比较好的框架,比如绘图框架charts,最近项目中刚好用到,通过Pod的方式直接导入,xcode会自动生成charts-swift.h的文件,然后在需要导入的地方import < ...
- oc中调用c函数 实现将字符串转换成unsigned char
帮助码友解决问题,从而复习了一下oc中调用c函数的方式 1,新建c 头文件 test.h 定义 c 函数 #ifndef test_h #define test_h void verificatio ...
随机推荐
- P3763 [TJOI2017]DNA
链接:https://www.luogu.org/problemnew/show/P3763 题解: 挺水的一题后缀数组 枚举每一个开头用后缀数组判断能否在3次内匹配完
- asp.net core session的使用
Session介绍 本文假设读者已经了解Session的概念和作用,并且在传统的.net framework平台上使用过. Asp.net core 1.0好像需要单独安装,在nuget控制台,选择你 ...
- 2015 Benelux Algorithm Programming Contest E-Excellent Engineers
题目大意:有n个人,每个人都有三个物品,排名分别为a[ i ],b[ i ],b[ i ],现在要删掉其中的一些人 如果一个人x的三个物品的排名为a[ x ],b[ x ],b[ x ],若存在另一个 ...
- Codeforces Round #428 (Div. 2)
终于上蓝名了,hahahahaha,虽然这场的 B 题因为脑抽了,少考虑一种情况终判错了,还是很可惜的.. B题本来过来1500个人,终判之后只剩下了200多个,真的有毒!!!! A - Arya a ...
- What Are You Talking About HDU1075
一开始我也想用map 但是处理不好其他字符.. 看了题解 多多学习! 很巧妙 就是粗暴的一个字符一个字符的来 分为小写字母和非小写字母两个部分 一但单词结束的时候就开始判断. #includ ...
- 6.Django与Ajax
Ajax 文件夹为Ajaxdemo 向服务器发送请求的途径: 1.浏览器地址栏,默认get请求: 2.form表单: get请求 post请求 3.a标签,超链接(get请求) 4.Ajax请求 特点 ...
- 图片裁切展示css
.wen_photo{ overflow:hidden;}.wen_photo img{ margin:0; padding:0; width:100%; height: 100%; object-f ...
- python 中的可变对象与不可变对象
近日辞职待工,没有实际的项目与大家分享.暂写写在实际运用python中遇到的关于可变对象和不可变对象的坑. 首先我们需要明确一个概念,在python中一且皆对象.我们一般定义一个变量a=0,其实质a是 ...
- 【RAY TRACING THE REST OF YOUR LIFE 超详解】 光线追踪 3-1 蒙特卡罗 (一)
今天起,我们就开始学习第三本书了 这本书主要讲的是蒙特卡罗渲染,以及相关的数学.术语概念等 这本书相较于前面两本有着什么不同,承担着什么样的任务,尚涉书未深,姑妄言之: 第一本书,带领我们初探光线追踪 ...
- android studio 查看预览所有屏幕分辨率下的显示
你可以打开在窗口的右侧预览面板设置上的布局.你可以通过修改面板顶部面板改变各种选项来修改预览,包括预览设备,主题,平台版本等等,可以同时预览多个设备上布局,可以从“设备”选项中下拉”预览所有屏幕的尺寸 ...