一起聊聊 Swift 3.0
Swift3.0将会给我们带来哪些改变:
1. 稳定二进制接口(ABI)
ABI是什么呢?API大家都知道是应用程序接口 API只是提供函数签名
而ABI是系统和语言层面的 如果ABI稳定 意味着以后Swift版本更新升级 我们不需要再修改老版本 Swift 语言编译的库了
如果你曾经从Swift 1.x 升级到 Swift 2.x 将会体会颇深
2. 弹性/韧性 解决易碎二进制接口问题
Fragile binary interface problem是面向对象编程语言的通病 如果在程序中引入了外部库 我们的的程序中使用并继承了该外部库中的类 如果外部库有改动 我们必须重新编译所有该类的继承树 而这类问题被称为脆弱的基类 (Fragile base class)
3. 可移植性
Swift可被移植到其他平台上
4. 全面支持泛型特性
Swift 2.2已经很好的支持泛型 但是还不够完善
Swift 3.0开始 将全面支持泛型的所有特性
5. 聚焦和完善
尽管是一个相对年轻的语言,但是Swift的快速发展已经积累了一定的语言功能 Swift 3.0将会会删除或改善这些功能 从而提供更好的整体一致性
6. 新的API设计规范
Swift3.0 发布了新的语言设计规范 其中在Swift3.0中标准库和核心库将会遵循这个设计规范
设计规范地址:
https://swift.org/documentation/api-design-guidelines/
关于设计规范我将会单独写一篇博客 感兴趣的记得关注我的公众号(DevTipss)或简书
7. 即将删除 currying func(Swift柯里化(Currying)) 特性
在Swift3.0中 currying func 将会被移除 该提案在SE-0002被提出
提案给出的原因是 currying func 用途是有限的并且增加了语言实现的复杂度
8. 从函数参数中删除var关键字
原因是var与inout会产生歧义和混乱
func doSomethingWithVar(var i: Int) {
i = 2 // This will NOT have an effect on the caller's Int that was passed, but i can be modified locally
}
func doSomethingWithInout(inout i: Int) {
i = 2 // This will have an effect on the caller's Int that was passed.
}
doSomethingWithVar(x)
print(x) // 1
doSomethingWithInout(&x)
print(x) // 2
doSomethingWithVar和doSomethingWithInout都可以在函数内部给i变量赋值 但是doSomethingWithVar并不能真正修改 i 的值
doSomethingWithInout可以真正修改 i 的值
var就产生了歧义和误导
9. 删除 ++ 和 -- 操作符
推荐使用+= 和 -=操作符
10. 为autoreleasepool添加错误处理
旧版autoreleasepool处理错误方式:
func doWork() throws -> Result {
var result: Result? = nil
var error: ErrorProtocol? = nil
autoreleasepool {
do {
... actual computation which hopefully assigns to result but might not ...
} catch let e {
error = e
}
}
guard let result = result else {
throw error!
}
return result!
}
Swift3.0 autoreleasepool 处理错误方式
public func autoreleasepool<Result>(@noescape body: () throws -> Result) rethrows -> Result
func doWork() throws -> Result {
return try autoreleasepool
{
... actual computation which either returns or throws ...
}
}
11. 允许直接引用(Default, Private, Repeat)关键字成员
enum UITableViewCellStyle : Int {
case \`default\`
case value1
case value2
case subtitle
}
enum SCNParticleImageSequenceAnimationMode : Int {
case \ `repeat\`
case clamp
case autoReverse
}
在Swift3.0之前我们引用default和repeat成员时 需要这样写:
let cell = UITableViewCell(style: .`default`, reuseIdentifier: nil)
particleSystem.imageSequenceAnimationMode = SCNParticleImageSequenceAnimationMode.`repeat`
Swift3.0时 允许我们直接访问default repeat 关键字成员
let cell = UITableViewCell(style: .default, reuseIdentifier: nil)
particleSystem.imageSequenceAnimationMode = SCNParticleImageSequenceAnimationMode.repeat
12. 将声明式@noescape和@autoclosure 改为类型属性
func f(@noescape fn : () -> ()) {} // declaration attribute
//新的语法
func f(fn : @noescape () -> ()) {} // type attribute.
func f2(a : @autoclosure () -> ()) {} // type attribute.
13. 重命名 Debug 标示符
__FILE__ -> #file
__LINE__ -> #line
__COLUMN__ -> #column
__FUNCTION__ -> #function
__DSO_HANDLE__ -> #dsohandle
Debug 标示符重命名后将会与#available #selector 关键字统一风格
参考:https://github.com/apple/swift-evolution
原文链接:http://www.jianshu.com/p/6a9e9e790064
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
一起聊聊 Swift 3.0的更多相关文章
- iOS开发系列--Swift 3.0
概述 从写第一篇Swift文章的时候到现在Swift已经从1.2发展到了今天的3.0,这期间由于Swift目前还在发展阶段并不能向下兼容,因此第一篇文章中的部分代码在当前的Xcode环境中已经无法运行 ...
- Swift 3.0 【Swift 3.0 相较于 Swift 2.2 的变化】
一.编译器和语法变化 函数或方法参数 调用函数或方法时从第一个参数开始就必须指定参数名 在Swift的历史版本中出现过在调用函数时不需要指定任何函数参数(或者从第二个参数开始指定参数名),在调用方法时 ...
- Swift 2.x -> Swift 3.0
Swift 3.0 相对于 2.x 有很大变化.特别是因为命名习惯的改变,导致许多 Api 都发生了变化.总的趋势是让表示更简洁. 对旧的代码升级,大部分可以根据提示来进行更正.但也有的需要手动修改. ...
- Swift 2.0 异常处理
转自:http://www.jianshu.com/p/96a7db3fde00 WWDC 2015 宣布了新的 Swift 2.0. 这次重大更新给 Swift 提供了新的异常处理方法.这篇文章会主 ...
- fir.im Weekly - Swift 3.0 的迁移适配指南
无论你是移动开发者,还是桌面端开发者,或者正在IoT领域探索的技术人员,那么应该更加关注 iDev 全平台开发者大会,也许是后半年 iOS 开发者最盛大的技术盛宴.既有知名公司带来专业视野,又有从 S ...
- Swift 3.0首个开发者预览版将在5月12日释出
Swift团队在博客中宣布Swift 3.0语言首个开发者预览版将于5月12日释出,正式版将在4-6周之后推出.开发者预览阶段并无确定的更新周期和计划,不过Swift团队称努力将其控 制在4-6周内. ...
- Swift 3.0 令人兴奋,但Objective-C也有小改进--Objective-C的类属性
由于Swift 3.0 出了太多令人兴奋的新特性,人们很容易忽略 Objective-C中的小改动.或许你会觉得苹果提及Objective-C 很可能是为了提高和Swift互操作性(译者注:互操作性主 ...
- 我也想聊聊 OAuth 2.0 —— Access Token
这是一篇待在草稿箱半年之久的文章 连我自己都不知道我的草稿箱有多少未发布的文章了.这应该是我在上一家公司未解散之前写的,记得当时是要做一个开发者中心,很不幸. 今天,打开草稿箱有种莫名的伤感,看到这个 ...
- 我也想聊聊 OAuth 2.0 —— 基本概念
这是一篇待在草稿箱半年之久的文章 连我自己都不知道我的草稿箱有多少未发布的文章了.这应该是我在上一家公司未解散之前写的,记得当时是要做一个开发者中心,很不幸. 今天,打开草稿箱有种莫名的伤感,看到这个 ...
随机推荐
- JDBC中DAO事务函数模版
DAO事物函数模版1: public void OrderFinsByPage(){ Connection conn = null; PreparedStatement pstmt = null; R ...
- Python面向对象2
方法 公共方法 私有方法 类方法 静态方法 #!usr/bin/python #coding:utf8 class Milo(): name = 'csvt' def fun1(self): prin ...
- C++设计模式——建造者模式
建造者模式 在GOF的<设计模式 可复用面向对象软件的基础>中是这样说的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 这句话,似懂非懂的.一个复杂对象的创建 ...
- 《Genesis-3D开源游戏引擎-FQA常见问题解答》2014年01月10号版本
1.Genesis-3D开源游戏引擎主要面向哪些用户人群?有限制吗? 1.我们的引擎没有限制,只要您想了解和使用我们的引擎,就可以加入Genesis-3D的大家庭.2.我们的主要用户群是各个相关的企业 ...
- Hadoop学习笔记2---配置详解
配置系统是复杂软件必不可少的一部分,而Hadoop配置信息处理是学习Hadoop源代码的一个很好的起点.现在就从Hadoop的配置文件谈起. 一.Hadoop配置格式 Hadoop配置文件格式如下所示 ...
- Junit。。。
keep the bar green to keep the code clean.
- MAC机常用快捷键整理表格
MAC机常用快捷键整理表格 范围 快捷键 说明 图形 (Command 键)在某些 Apple 键盘上,此键也可能为标志() Control (Control 键) Alt Opt ...
- 你真的了解一段Java程序的生命史吗
作为一名程序猿 ,我们每天都在写Code,但你真的了解它的生命周期么?今天就来简单聊下它的生命历程,说起一段Java Code,从出生到game over大体分这么几步:编译.类加载.运行.GC. 编 ...
- Spring EL Lists, Maps example
In this article, we show you how to use Spring EL to get value from Map and List. Actually, the way ...
- stm32f407 定时器 用的APB1 APB2 及 定时器频率
上午想要用Timer10做相对精确的延时功能,但是用示波器发现实际延时数值总是只有一半,百思不得其解.仔细查阅各处资料结合实际研究后对stm32f407的14个定时器的时钟做一个总结: 下面来源: h ...