红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

从 SlideShare 的开发看 Swift 语言

  • 2015-06-04
  • 本文字数:1809 字

    阅读完需:约 6 分钟

作为苹果公司推出的 iOS 和 OS X 应用程序编写语言, Swift 已经走过了一年的路程。因其安全的编程模式以及一些新独特的功能,Swift 语言受到了苹果应用开发人员的关注。但是,究竟这门新的编程语言使用感受如何呢?在苹果全球开发者大会(WWDC 2015)召开之前, SlideShare 移动应用的软件开发工程师 Kyle Sherman 分享了自己的一些心得体会

在 Swift 发布以后,SlideShare 团队在第一时间就开始研究这门新的语言,并在 4 个月后发布了 SlideShare 的 1.0.0 版本。当时,这是苹果商店中少数几个使用 Swift 开发的软件之一。目前,SlideShare 已经历经 11 次升级,到了 1.6 版本。首先,Kyle 说明了 SlideShare 团队使用 Swift 的原因。简单而言,使用 Swift 是因为其与 Objective-C 之间良好的互操作性、独特的语法特性以及安全的编程模式。尤其是良好的互操作性保证了使用由 Objective-C 编写的 LinkedIn 框架以及一些开源的第三方源代码的便捷性。

此外,Swift 与 Ruby 或者 Python 这样的脚本语言语法类似,保证了 SlideShare 团队可以迅速上手。而且,作为一个升级如此频繁的软件的开发人员,kyle 表示 Swift 语言的迅速变化完全不是问题。因此, SlideShare 的工程经理 Francisco Meza 表示使用 Swift 带来了诸多好处。除了自定义的一个子类、一些开源的库、LinkdedIn 内部的开发库以及一个内部的 Core Data 接口等,SlideShare 绝大部分代码都采用了 Swift 进行编写。

接下来,Kyle 详细讲述了 Swift 的诸多优点。在与 Objective-C 的互操作性方面,Swift 用户在桥接的位置添加一个头文件就可满足大部分情况的需求。只是在使用 NSDictionary 以及 C 或者 Objective-C 创建的枚举时,用户需要特别注意。至于 Swift 的语法与特性方面。相比于 Objective-C 或者 C++,Swift 去掉了一些不方便的语法约束。例如,在 Swift 中存在一个与 C/Objective-C 中的 block 功能很像的概念——closure。但是,closure 可以省略调用函数时的类型声明以及 return 的书写。这样,代码在保证易读的同时将会更加灵活和自然。

另外,Swift 中的泛型代码可以让开发人员定义适用于任何类型的、灵活且可重用的函数和类型。目前,许多 Swift 标准库都采用泛型代码来构建。最后,作为 Swift 的一个重要特性,运算符重载允许用户对现有的作用在特定的结构体和类上的操作符功能进行修改。虽然 SlideShare 中还并没有用到运算符重载,但 Kyle 表示早在使用 Objective-C 的时候,他就有使用该特性的需求。

Swift 在安全方面所做的加强体现在以下几个方面。

  1. Swift 的可选类型会进行编译检查(如 nil 检测等),防止一些常见的运行时错误。
  2. Swift 的条件语句中循环 / 判断条件不需要括号,但循环 / 判断体(body)必需括号。这一特性可以有效的减少条件语句中因为语句所属层次错误引起的 bug。
  3. Swift 初始化包括了很多过程。其中,两段式构造过程的使用让构造过程更安全,同时在整个类层级结构中给予了每个类完全的灵活性。而且,Swift 编译器会执行四种有效的安全检查,以确保两段式构造过程能顺利完成。
  4. Switch 语句中每一个可能的值都必须要有一个 case 分支与之对应。而且,当匹配的 case 分支中的代码执行完毕后,程序会直接终止 switch 语句。
  5. Swift 不支持隐式类型转换(Implicitly casting)。强制类型转换使用 is 和 as 操作符实现。在 as 操作符后加一个“?”可以有效避免 nil 引起的程序崩溃。
  6. Swift 中支持 public、private、internal 以及 final 等关键字,可以控制访问方法或函数的权限。

当然,除了这些优点,SlideShare 团队也发现了 Swift 的一些缺点。这包括从单行表达式闭包中隐式返回结果可能会引起编译错误、类中的函数无法返回该类型的数据和函数 / 方法中的参数命名不清晰等。而且,Swift 各个版本中也存在一些问题,诸如编译时间较长且受 CPU 影响明显、当 SourceKit 崩溃时语法高亮也会失效、实时语法检查有一定的延迟、 Xcode 升级时代码也要相应的更新、代码莫名的无法编译或引起 IDE/ 计算机崩溃。

不过,随着 Swift 版本的升级,这些问题大部分都得到了一定程度的改善。最重要的是,Kyle 他们在 SlideShare 开发过程中没有遇到 Swift 语言本身引起的问题。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-06-04 09:471862
用户头像

发布了 268 篇内容, 共 117.6 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

鸿蒙开发丨设备内UIAbility的几种交互方式

华为云开发者联盟

鸿蒙 后端 开发 华为云 华为云开发者联盟

喜报!博睿数据荣获“2023年度卓越数字创新企业”

博睿数据

可观测性 博睿数据

AI数字人直播软件及直播间搭建教程分享!

青否数字人

数字人

让数据成为生产力,用友时序数据库为智造按下“瞬时加速键”

用友BIP

时序数据库

为什么要少写代码?去掉代码的核心逻辑是什么?

代码生成器研究

XSKY SDS V6.3 版本发布:持续强化非结构化存储和管理能力

XSKY星辰天合

软件定义存储

AI 与 Web3 数据行业融合的现状、竞争格局与未来机遇探析(下)

Footprint Analytics

区块链 web3 AI智能

制作古风纹理的滕王阁3D模型

3D建模设计

材质贴图 纹理贴图 材质纹理 GLTF材质编辑

带你玩转 Vite + Vue3 高低版本常用玩法 | 京东云技术团队

京东科技开发者

Vue 前端 vite

大语言模型底层架构丨带你认识Transformer

华为云开发者联盟

Python 人工智能 华为云 华为云开发者联盟 大预言模型

岳阳楼3D模型纹理贴图

3D建模设计

材质贴图 纹理贴图 材质纹理 GLTF材质编辑

借助AI构建企业营销数据,锁定目标客户价值模型

用友BIP

数智营销

制作木制纹理的蓬莱阁3D模型

3D建模设计

材质贴图 纹理贴图 材质纹理 GLTF材质编辑

数据驱动:离散制造行业财务报告应用场景与实践

用友BIP

数据驱动

Wireshark中的ARP协议包分析是什么?

小齐写代码

超越节点引擎临界:华为云NES颠覆游戏规则

华为云PaaS服务小智

云计算 华为云

Amazon Code Whisperer 的正式使用,全新 AI 代码工具等你发现!(内附详细安装步骤图解)

亚马逊云科技 (Amazon Web Services)

Python 人工智能 云上探索实验室 Amazon CodeWhisperer Amazon Cloud9

虾皮关键词详情API接口在电商行业中的重要性及实时数据获取实现

Noah

制作木制纹理的黄鹤楼3D模型

3D建模设计

gltf/glb模型 材质贴图 纹理贴图 材质纹理 GLTF材质编辑

Flink State 状态原理解析 | 京东物流技术团队

京东科技开发者

flink 实战 state Flink State

虾皮商品详情接口在电商行业的重要性及实时数据获取实现

Noah

合约跟单交易所开发

区块链技术

写实3D游戏模型纹理贴图设置

3D建模设计

材质 纹理 贴图 3D模型纹理贴图

为 3D 模型制作纹理的 9 种最佳方法

3D建模设计

材质 纹理 贴图 3D模型纹理贴图

扫盲Kafka?看这一篇就够了! | 京东云技术团队

京东科技开发者

kafka 消息队列 kafka架构

如何为游戏角色3D模型设置纹理贴图

3D建模设计

材质 纹理 贴图 3D模型纹理贴图 GTLF/GLB

淘宝/天猫商品详情 API 的技术架构是怎样的?

技术冰糖葫芦

API 开发

淘宝商品详情页面数据接口(taobao.item_get)

tbapi

淘宝 淘宝API接口 淘宝商品详情接口 淘宝商品API接口 淘宝商品数据接口

95所双一流高校参与,“搜索界奥林匹克”决出28个获奖团队

Geek_2d6073

Vue混淆与还原

虚拟线程原理及性能分析

得物技术

jdk 性能优化

从SlideShare的开发看Swift语言_移动_张天雷_InfoQ精选文章