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 中的替代类型,例如 NSStringString
    • Objective-C 确定类型到 Swift 中的同等类型,例如 idAnyObject
    • Objective-C 概念到 Swift 中相匹配的概念,例如 pointersoptionals
  • 4)不能直接把 C++ 代码导入 Swift,解决办法是为 C++ 代码创建一个 Objective-C 或者 C 的封装。

在 OC 中调用 Swift 代码的更多相关文章

  1. 在OC中调用Swift类中定义delegate出现:Property 'delegate' not found on object of type ...

    找了许久没找到答案, 在下面的链接中, 我解决了这个问题: http://stackoverflow.com/questions/26366082/cannot-access-property-of- ...

  2. Swift基础之OC文件调用Swift代码(在上次的基础上写的)

    前两天刚写过Swift调用OC,今天在原来的基础上,实现OC调用Swift. 首先,创建一个OneSwiftFile.swift文件,创建一个继承于NSObject的类(这个地方你可以自己选择继承的父 ...

  3. 在Objc项目中调用Swift

    之前的文字中记录了在Swift项目中调用OC的相关代码,比较简单直接 传送门 但是在OC中调用swift代码则不是那么的和谐,网络上很多文章业已经有点陈旧.记录步骤如下: 1.创建OC项目 (1)启动 ...

  4. 如何在C语言中调用Swift函数

    在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中 ...

  5. 如何在Java中调用Python代码

    有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调 ...

  6. C#中调用PowerShell代码

    在C#中调用PowerShell代码,很多时候Add是不好使的!要用AddScript!记录一下! using (Runspace runspace = RunspaceFactory.CreateR ...

  7. 在Java中调用Python代码

    极少数时候,我们会碰到类似这样的问题:与A同学合作写代码, A同学只会写Python,不熟悉Java ,而你只会写Java不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方 ...

  8. iOS OC中桥接swift第三方库

    swift中有一些比较好的框架,比如绘图框架charts,最近项目中刚好用到,通过Pod的方式直接导入,xcode会自动生成charts-swift.h的文件,然后在需要导入的地方import < ...

  9. oc中调用c函数 实现将字符串转换成unsigned char

    帮助码友解决问题,从而复习了一下oc中调用c函数的方式 1,新建c 头文件  test.h 定义 c 函数 #ifndef test_h #define test_h void verificatio ...

随机推荐

  1. [转] 学会fetch的用法

    fetch是web提供的一个可以获取异步资源的api,目前还没有被所有浏览器支持,它提供的api返回的是Promise对象,所以你在了解这个api前首先得了解Promise的用法.参考阮老师的文章 那 ...

  2. 【BZOJ】3123: [Sdoi2013]森林

    题解 ------------------ 我莫不是一个智障吧 我把testdata的编号 当成数据组数读进来 我简直有毒 以为哪里写错了自闭了好久 实际上这题很简单,只要愉悦地开个启发式合并,然后每 ...

  3. k8s 使用

    转自:https://blog.csdn.net/zyc88888/article/details/79281954

  4. BZOJ4034 [HAOI2015]树上操作 树链剖分

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4034 题意概括 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三 ...

  5. java07接口与继承动手动脑

    1.源代码: package Work; class A{ public A(){ System.out.println("Class A."); } public A(Strin ...

  6. 统计难题 HDU1251

    简单方法: #include<bits/stdc++.h> using namespace std; int main() { ]; map<string,int>ma; ) ...

  7. POJ 1222 熄灯问题【高斯消元】

    <题目链接> 题目大意: 有一个5*6的矩阵,每一位是0或者1. 没翻转一位,它的上下左右的数字也为改变.(0变成1,1变成0).要把矩阵中所有的数都变成0.求最少翻转次数的方案,输出矩阵 ...

  8. 004.Docker镜像管理

    一 镜像基本操作 镜像是一个包含程序运行必要依赖环境和代码的只读文件,其本质是磁盘上一系列文件的集合.它采用分层的文件系统,将每一次改变以读写层的形式增加到原来的只读文件上.镜像是容器运行的基石. 1 ...

  9. git 快照及分支

    分支介绍 分支就是科幻电影里面的平行宇宙,当你正在电脑前努力学习Git的时候,另一个你正在另一个平行宇宙里努力学习SVN. 如果两个平行宇宙互不干扰,那对现在的你也没啥影响.不过,在某个时间点,两个平 ...

  10. 在windows 10下使用docker

    准备工作 Windows 10下的Docker是依赖于Hyper-v的,首先我们需要启用它:控制面板 -> 程序 -> 启用或关闭Windows功能 -> 选中Hyper-V 安装D ...