之前
Apple在
WWDC上已将
Swift 3整合进了
Xcode 8 beta中,而本月苹果发布了
Swift 3的正式版。这也是自
2015年底Apple开源Swift之后,首个发布的主要版本(
Swift 3.0),该版本实现了
Swift演变过程中所讨论并通过的90多个提议。这里我对
Swift 3的新特性、新变化进行一个总结。
一、彻底移除在 Swift 2.2 就已经弃用的特性
1,弃用 ++ 与 -- 操作符
过去我们可以使用
++与
--操作符来实现自增自减,现已废弃。
1
2
3
4
5
|
var
i = 0
i++
++i
i--
--i
|
//使用复合加法运算(+=)与减法运算(-=)
i = 0
i += 1
i -= 1
//使用普通的加法运算(+)与减法运算(-)
i = i + 1
i = i - 1
|
我们过去可能习惯下面风格的 for 循环,现在也已废弃。
for
i=1; i<100; i++ {
print
(
"\(i)"
)
}
|
//for-in循环
for
i
in
1...10 {
(i)
}
//for-each循环
(1...10).forEach {
($0)
}
|
3,移除函数参数的 var 标记
在 Swift 函数中,参数默认是常量。过去可以在参数前加关键字 var 将其定义为变量,这样函数内部就可以对该参数进行修改(外部的参数任然不会被修改)。
age = 22
add(age)
func
add(
age:
Int
) {
age += 1
现在这种做法已经被废弃,
Swift 3
不再允许开发者这样来将参数标记为变量了。
4,所有函数参数都必须带上标签 过去如果一个函数有多个参数,调用的时候第一个参数无需带标签,而从第二个参数开始,必须要带标签。
@H_403_366@
1
let
number = additive(8,b: 12)
additive(a:
,b:
) ->
{
return
a + b
现在为了确保函数参数标签的一致性,所有参数都必须带上标签。
6,Selector 不再允许使用 String 假设我们给按钮添加一个点击事件响应,点击后执行 tapped 函数。以前可以这么写: 二、Swift 3 的新特性
1,内联序列函数sequence
Swift 3新增了两个全局函数: sequence(first: next:)和 sequence(state: next:)。使用它们可以返回一个无限序列。下面是一个简单的使用样例,更详细的介绍可以关注我后续的文章。
2,key-path不再只能使用String
我们还是可以继续使用
String类型的
key-Path:
3,Foundation 去掉 NS 前缀 比如过去我们使用 Foundation相关类来对文件中的 JSON数据进行解析,这么写:
4,除了M_PI 还有 .pi 在过去,我们使用 M_PI常量来表示 π。所以根据半径求周长代码如下:
5,简化GCD的写法 关于 GCD,我原来写过一篇相关文章: Swift - 多线程实现方式(3) - Grand Central Dispatch(GCD)
过去写法采用
C语言的风格,初学者可能会不大适应。比如创建一个简单的异步线程:
6,Core Graphics的写法也更加面向对象化 Core Graphics是一个相当强大的绘图框架,但是和 GCD一样,它原来的 API也是 C语言风格的。 比如我们要创建一个 view,其内部背景使用 Core Graphics进行绘制(红色边框,蓝色背景)。过去我们这么写:
7,新增的访问控制关键字:fileprivate、open 在 Swift 3中在原有的 3个访问控制关键字 private、 public、 internal外。又添加了2个新关键字 fileprivate、 open。它们可以看成是对原来 private和 public的进一步细分。具体使用方法和介绍可以关注我的后续文章。
三、一些语法的修改
1,数组排序:sort()与sorted() 过去数组排序的两个方法: sortInPlace()和 sort(),现在分别改名成 sort()和 sorted() sort()是直接对目标数组进行排序。 sorted()是返回一个排序后的数组,原数组不变。
|