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

在Cocoa和ObjectiveC中使用Swift

基础设置Swift在设计之初,就考虑到与Cocoa和Objective-C的无缝兼容。Swift可以调用Objective-C的API,Objective-C也可以调用Swift的

基础设置

Swift在设计之初,就考虑到与Cocoa和Objective-C的无缝兼容。Swift可以调用Objective-C的API,Objective-C也可以调用Swift的API。这个特性,会让Swift成为你工具箱中又一个简单,方便而又强大的工具。

这个指南覆盖Swift和Objective-C兼容的三个重要的方面,对于你开发Cocoa应用将会大有裨益。

  • 互用性让你将Swift代码和Objective-C代码之间建立接口,这样就可以在Objective-C中使用Swift的类,Swift中也可以使用我们熟悉的Cocoa类,模式,实践。

  • 混合和匹配可以将Swift和Objective-C这两种语言混合编写app,并且毫无芥蒂的互相调用

  • 迁移因为有上面提到的互用性,混合和匹配,所以,把一个已经存在的Objective-C项目迁移到Swift并不难,并且还可以用Swift新特性来部分重构Objective-C写的app。

在开始学习这些新特性之前,我们先要创建一个可以获取Cocoa系统框架的Swift开发环境。

创建Swift开发环境

要想体验一下用Swift开发Cocoa app,先选一个Xcode模板来创建一个新的Swift工程

用Xcode创建一个Swift工程

1.选择File > New > Project > (iOS, watchOS, tvOS, or macOS) > Application > 你选择的模板。

2.点击语言选择弹出框,选择Swift

《在Cocoa和Objective-C中使用Swift》

Swift和Objective-C工程结构几乎一样,有一点比较重要的区别:Swift没有头文件。所有的类,函数,常量都在一个.swift文件里,实现文件和接口文件之间没有一个明显的划分。关于这点,在Swift和Objective-C混编里有更多细节的讨论。

现在可以开始体验Swift了,在app delegate里直接写Swift代码,或者通过File > New > File > (iOS, watchOS, tvOS, or macOS) > Source > Swift新建一个Swift文件来写Swift代码。

理解Swift中Import的处理过程

Swift工程建好后,就可以引入Cocoa或者CocoaTouch中任意的Framework,在Swift中使用Objective-C的大门即将打开。

只要是支持模块化的Objective-C框架或C的库都可以直接引入到Swift中使用,这就包括所有的Objective-C系统框架,例如,Foundation, UIKit, SpriteKit,还有系统提供的一般性的C库。例如要在一个Swift文件里调用Foundation的API,只要在文件顶部添加import语句就可以了。

import Foundation

有了这条import语句,Swift文件就能获取Foundation框架中,所有的类,协议,方法,属性,常量。

import做的事情比较简单直接。Objective-C会将框架里的API归并到头文件。而在Swift中,这些头文件会编译到一个Objective-C模块里,形成Swift可以调用的API。import语句负责这些Objective-C中定义的函数,类,方法,类型等信息在Swift中会有以怎样的形式出现。对于函数和方法,import会影响他们的参数类型和返回值类型。对于类型,有一下几个影响:

  • 转换Objective-C中的类型到Swift中相同的类型,如id到Any
  • 转换Objective-C中的核心类型到Swift中的可替换类型,如NSString到String
  • 转换Objective-C中的概念到Swift中可匹配的概念,如指针到可选类型

更多在Swift中使用Objective-C的信息,请查看与Objective-C API交互

注意
C++文件不能直接import到Swift中,需要创建一个Objective-C文件或者C文件来包住C++代码

在Objective-C中import Swift文件的方式和Swift中import Objective-C类似。Swift会将API归并到一个Swift模块。然后这些Swift模块会生成Objective-C头文件。这些头文件里的API就可以被调用了。但是有些Swift API并不能转化到Objective-C头文件,因为这些是Swift语言特有的,所以,Objective-C不能生成相应的功能。

更多在Objective-C中使用Swift的信息,请查看Swift和Objective-C混编


推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 如何高效创建和使用字体图标
    在Web和移动开发中,为什么选择字体图标?主要原因是其卓越的性能,可以显著减少HTTP请求并优化页面加载速度。本文详细介绍了从设计到应用的字体图标制作流程,并提供了专业建议。 ... [详细]
author-avatar
手机用户2602924833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有