写点什么

从 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:472107
用户头像

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

关注

评论

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

点燃你的Python技能:剖析闭包与装饰器的魔力

测吧(北京)科技有限公司

测试

测试管理 | 测试开发高薪私教线下班手把手带你提升职业技能

测吧(北京)科技有限公司

测试

从零开始:编写个性化的 Spring Boot 启动 Banner

Liam

Java 程序员 DevOps Spring Boot 后端

共话 AI for Science | 北京大学王超名:BrainPy,迈向数字化大脑的计算基础设施

ModelWhale

人工智能 AI 脑科学 AI4S 类脑智能

Envoy网格基础概念

蝉翼2u

云原生 服务网格 envoy

sketch文件导出没有背景色怎么办? sketch背景色消失的解决办法

Rose

Sketch下载 sketch无背景 矢量图设计 sketch mac破解版

ChatGPT:故障频发背后的反思,重新理解稳定性

焦振清

稳定性 稳定性治理 AZ 逃生 蓝军

高效灌溉 - 真正意义的降本增效

zhumingwu

photoshop 2022新功能介绍 含ps2022破解版下载资源

Rose

ps PS2022下载 Photoshop 2022下载 Photoshop 2024破解版

华为阅读合作伙伴年度会议圆满举行,将持续共建更智慧、更丰富数字阅读平台

最新动态

免费的快递预约上门取件API接口【快递鸟】

快递鸟

快递物流

【wayn商城】本地开发指南

越长大越悲伤

Java 开源 前端 后端 wayn商城

试用强大的百度智能云【AI原生应用工作台】实现《毛泽东传记问答》实操记录

livingbody

AI BAIDU 知识库 人工智能「 知识库问答

百万级监控指标的秒级采集与处理

鲸品堂

监控 解决方案

Python多任务协程:编写高性能应用的秘密武器!

测吧(北京)科技有限公司

测试

深入了解Redis数据结构

EquatorCoco

redis 数据结构 前端

云上业务一键性能调优,应用程序性能诊断工具 Btune 上线

Baidu AICLOUD

性能优化 运维监控

React和Vue的有何不同?

伤感汤姆布利柏

服务网格基础

蝉翼2u

微服务 云原生 服务网格

怎样解决注塑行业的难点与现状?

万界星空科技

mes 万界星空科技 万界星空科技mes 注塑MES 注塑行业

CQ 社区版 2.8.0 | 支持TiDB、StarRocks,新增列过滤算法、导出模式设置等

BinTools图尔兹

数据库 数据库管理 数据脱敏 数据变更

顺丰科技智慧供应链助力自动化立体仓库建设

新消费日报

想拥有一个属于自己的网站吗?

zhumingwu

BOE(京东方)与JDG京东电竞俱乐部达成全面品牌战略合作 赋能多款高端电竞新品开启2024电竞产业“开门红”

科技热闻

用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

测吧(北京)科技有限公司

测试

基于开源IM即时通讯框架MobileIMSDK:RainbowChat v11.0版已发布

JackJiang

网络编程 即时通讯 IM

【新手快速入门】在线快速搭建AI原生应用

AI大咚咚

和鲸CEO范向伟入选2022年上海市东方英才计划创业项目领军创业人才

ModelWhale

人工智能 创业 AI 东方英才 前沿产业

如何实现一个百万亿规模的时序数据库,百度智能云 BTS 架构解析和实践分享

Baidu AICLOUD

时序数据库

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