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

  • 相关阅读:
    在luogu上嫖到了一张感觉很NB的图
    luoguP6028算术 题解(推柿子+整除分块+调和级数)
    notebook
    不氵的 0xd
    点分治&&DSU on tree学习笔记
    洛谷10月月赛2T1题解
    概率与期望题库题目整理
    TiDB-TiUP工具使用
    TiDB-单机学习环境部署(4.X版本)
    DB-异构数据库迁移工具
  • 原文地址:https://www.cnblogs.com/QianChia/p/8762752.html
Copyright © 2011-2022 走看看