热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在OC中调用Swift代码

1、在Objective-C项目中使用Swift代码1)在OC项目中创建.Swift文件,文件中的格式为其本有的格式。2)Xcode提示是否创建Objective-Cbridgin

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 即可。

      在 OC 中调用 Swift 代码

  • 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 根据设置的模块名自动生成的。

      在 OC 中调用 Swift 代码

    • 在开始的几次编译或者代码调试中,可能会出错,提示找不到这个自动生成的文件,一般对项目进行 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 即可。

      在 OC 中调用 Swift 代码

  • 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 根据设置的模块名自动生成的。

      在 OC 中调用 Swift 代码

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 的封装。


推荐阅读
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细介绍了Objective-C中的面向对象编程概念,重点探讨了类的定义、方法的实现、对象的创建与销毁等内容,旨在帮助开发者更好地理解和应用Objective-C的面向对象特性。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 我在项目中发现设置了 GCC_NO_COMMON_BLOCKS = NO 的配置项,位于 Apple LLVM 编译器 3.1 的代码生成设置中。 ... [详细]
  • 本文详细介绍了如何在iOS5中创建和理解简单的Hello World应用,包括Interface Builder的使用、Objective-C源代码文件的结构以及事件处理机制。 ... [详细]
  • 本文介绍了iOS应用开发的主要框架,包括Foundation、UIKit、CoreData及CoreGraphics等,并探讨了开发iOS应用所需的硬件和软件环境,以及推荐的编程语言。 ... [详细]
  • 在现代移动应用开发中,尤其是iOS应用,处理来自服务器的JSON数据是一项基本技能。无论是使用Swift还是PHP,有效地解析和利用JSON数据对于提升用户体验至关重要。本文将探讨如何在Swift中优雅地处理JSON,以及PHP中处理JSON的一些技巧。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤
    开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • ###问题删除目录时遇到错误提示:rm:cannotremoveusrlocaltmp’:Directorynotempty即使用rm-rf,还是会出现 ... [详细]
author-avatar
mobiledu2502929507
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有