v聊聊 Swift 3.0 - 新版本对我们的影响

简介:

聊聊 Swift 3.0 - 新版本对我们的影响


Swift 近两年的发展势头非常的迅猛,而在它开源后,更是如井喷一样的势头,除了 iOS 平台,还支持了 Linux。 而今年下半年, Swift 3.0 也会随之发布。这次我就和大家聊一下 Swift 3.0 会有什么新东西吧。

Swift 专门为版本更新相关的文档创建了一个 Guihub 主页,地址是 https://github.com/apple/swift-evolution 。

这里面列出了 Swift 3.0 版本着重处理的地方,我来帮大家总结一下:

更稳定的 ABI

所谓 ABI 就是二进制接口, 是更加底层的机制。 我们都熟知 API,是应用程序接口,比如 fun open(path: String) , 这时一个函数签名,只要我们的程序在编译的时候能找到这个方法签名的实现就可以编译通过。这样,我们想改变这个方法的具体实现的时候,并不需要修改我们调用层的代码,只需要将这个方法的实现替换成另外一个库就可以了。

而 ABI 就更加底层了,它是基于语言和系统层面的。如果 Swift 3 对 ABI 的优化做的足够好的话,我们就可以之间在之后的版本中引用老版本 Swift 语言编译的库了。就不用怕 Swift 语言升级之后,很多第三方库都需要修改的问题了。

相信有从 Swift 1.x 迁移到 Swift 2 体验的同学们对这个感触会更深~ 当然,这是 Swift 3 的一个目标,能不能实现就要看社区的力量了。

解决易碎接口问题

所谓易碎接口嘛,是现代程序语言的一个通用问题,它的全称叫做 Fragile Binary Interface。 简单来说呢,就是 Swift 以及当前的大多数主流开发语言中的类的属性,在底层都是通过偏移来访问的,比如book.name, 我们在程序中访问一个对象的属性非常直观。 但他在编译后,实际上是这样的形式location(book) + offset(name)。访问 name 属性是通过 book 对象所在的内存地址加上一个偏移来实现的。

那么 Swift 中的类在编译后,会将它所有的属性的偏移值也都计算出来。这样会加快程序在运行时的执行速度,因为不需要在运行时再计算这些偏移量了。如果所有的类之间没有任何关联就不会有什么问题,但在实际中,我们使用类都会有继承关系。假如我们的主项目中引用了一个外部的库,我们主程序中继承了这个外部库中的类。那么如果这个库中有任何改动,我们都必须重新编译所有的类继承树上面的代码,否则在我们主程序的子类中,就会发生偏移计算错误。

简单来说呢,如果 Swift 3.0 能把 Fragile Binary Interface 处理好的话,对我们开发者最直观的感受就是: 编译速度加快

关于 Fragile Binary Interface 更详细的内容,大家如果有兴趣的话可以参考这里:https://en.wikipedia.org/wiki/Fragile_binary_interface_problem

可移植性

这个很简单,就是让 Swift 能移植到更多的其他平台,并且让 Swift 写出的代码,可以正确的运行在所有这些平台上。

全面支持泛型

目前的 Swift 版本已经很好的支持了泛型的大部分特性了,这点大家在看 Swift 2.2 的 API 文档中其实已经能够发现了。但目前还并没有将泛型的特性完全实现,所以这次 Swift 3.0 打算全面支持泛型的所有特性。

发布 API 设计规范

这次还发布了 Swift 语言的 API 设计规范。 这个规范的目的是让大家设计出更加统一的 API,里面给出了很多代码规范,这个非常值得一看,即便我们不去构建开源库,对我们的日常代码风格也是很有帮助的。并且 Swift 3.0 会对大多数 API 根据这个规范进行重新设计。理解了这个设计规范,对我们理解 Swift 语言也是很有帮助的~

设计规范地址:https://swift.org/documentation/api-design-guidelines

总结

Swift 是一个快速发展的语言,开源社区源源不断的给它注入力量。从这次 3.0 的发布内容来看,它正在尝试解决编程语言最前沿的问题,比如 Fragile Binary Interface, 大家有兴趣可以关于它的相关资料,这里就不再赘述。



本文来自云栖社区合作伙伴“Linux中国”

原文发布时间为:2013-04-02.

相关文章
|
Swift 图形学 数据安全/隐私保护
Swift 各版本
介绍Swift各个历史版本
325 0
Swift 各版本
|
iOS开发
iOS中 切圆角,任意几个角(带边框,不带边框)__OC和Swift版本 韩俊强的博客
需求: 1.日常我们在切控件圆角时会遇到想切任意圆角? 2.切过圆角带边框和不带边框的选择? 那么今天我们就用Objective-C和Swift都给它实现了: OC代码: UILabel *myLabel = [[UILabel alloc]initWithFrame:CGRectMake(100, 100, 200, 70)]; myLabel.
3022 0
|
Swift iOS开发
Swift 1.2版本新特性
随着Xcode6.3正式版本的推出,Swift语言也正式进入1.2版本,那么1.2版本有什么新特性呢?来快速了解一下吧。
823 0
|
缓存 Swift 数据安全/隐私保护
|
Swift
Swift Beta6 编译之前版本出错
安装Xcode6 Beta6之后,编译之前的项目可能会出问题,比如出现__TFSs26_forceBridgeFromObjectiveCU__FTPSs9AnyObject_MQ__Q_的问题,如下图: 遇到这个问题只要把Derived Data清除掉,重新编译就可以了: 这样一来__TFSs26_forceBridgeFromObjectiveCU__FTPSs9AnyObject_MQ__Q_的问题就解决了。
918 0
|
iOS开发
Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课
<p><span style="font-size:14px;">Swift项目开发实战-基于分层架构的多版本iPhone计算器-直播公开课</span></p> <p><span style="font-size:14px;">本课程采用QQ群直播方式进行直播,价值99元视频课程免费直播。完整的基于Swift项目实战,手把手教你做一个Swift版iPhone计算器。(直播过程也有惊喜!)<b
1861 0
|
4月前
|
Unix 调度 Swift
苹果iOS新手开发之Swift 中获取时间戳有哪些方式?
在Swift中获取时间戳有四种常见方式:1) 使用`Date`对象获取秒级或毫秒级时间戳;2) 通过`CFAbsoluteTimeGetCurrent`获取Core Foundation的秒数,需转换为Unix时间戳;3) 使用`DispatchTime.now()`获取纳秒级精度的调度时间点;4) `ProcessInfo`提供设备启动后的秒数,不表示绝对时间。不同方法适用于不同的精度和场景需求。
150 3
|
4天前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
13 2