Swift4 的变化列举

2017 Swift语言已经更新到了第4版,应该说Swift发展到现在这样才算相对稳定,不再是每一次更新对于开发者来说都像是半个新的语言一样,老的工程都要重新一点点的修改,虽然不至于像之前的变化那么大,但是也还是有一些改变的,下面就介绍可能会很常见的几点区别,以后也会经常更新

1.Private关键字

Swift3中的private属性或者方法都不能在extension扩展中被访问,就像下图这样是会报错的

Swift4 的变化列举_第1张图片

如果我们用fileprivate来修饰属性或者方法的话,那么在同一个文件里面写的extension就能方法了,可是这种做法也有它的缺点,就是同一个文件里可以写不同的Class或者不同的Class的extension,他们也都能访问我们的TestClass下的fileprivate标记的属性方法。

现在到了Swift4之后就有了变化,上面这种在某个Class类的extension里就可以访问这个Class里面private标记的属性和方法了。但是注意这个extension必须跟Class写在同一个文件内,不然也是不能访问的!


2.可以直接对String进行index相关方法

以前对String单个字符做操作或者取坐标等等,都需要访问String的characters属性,现在在Swift4里就可以直接对String调用方法即可,区别见下图

Swift4 的变化列举_第2张图片


Swift4 的变化列举_第3张图片


3.开区间

比如以前我们表示一个区间会这样写1...5或者1..<5,可以看到它都需要明确写出一个下限和一个上限。现在Swift4允许你设定一个区间只有下限或者只有上限,比如...5或5...

现在你可以像下图这样,如果我要对一个数组从下标为2的开始遍历,直接使用2...即可

Swift4 的变化列举_第4张图片
Output: 3 4


4.类和协议的组合

现在我们能将类和协议组合起来变成一个新的类型,比如我们可以限定我们的方法接受的参数必须是"A类"的对象且同时遵守"B协议",类和协议通过符号&组合起来

Swift4 的变化列举_第5张图片
有一个叫Program的类和一个Testable的协议
Swift4 的变化列举_第6张图片
此方法的参数必须是Program类且同时遵守Testable协议


5.高阶方法map、filter的返回值类型

Dicitonary的filter高阶方法在以前返回的是一个新的数组,而现在返回的就是一个新的字典,区别看下图

Swift4 的变化列举_第7张图片
swift3
Swift4 的变化列举_第8张图片
swift4


同时Dicitonary多了一个新的map方法,叫做mapValue,可以对字典里的每一个value进行遍历处理返回一个新的value,返回的也是一个新的Dicitonary

Swift4 的变化列举_第9张图片
新方法mapValue举例


mapValue的输出结果


PS:另外Set的filter方法返回的也将是一个新的Set而不是Array了


6.Dictionary的新方法grouping

swift4的Dicitonary多了一个叫grouping的新方法,将一个序列里的元素遍历一遍,然后每个元素返回一个所对应的key,然后将相同的key的元素放进一个数组作为这个key对应的value,最后返回一个分好组的Dictionary对象。

比如下面的列子,可以对一组人名进行分组,取出每个元素第一个字作为key

Swift4 的变化列举_第10张图片
grouping方法
print打印结果


7.swap方法交换数组内元素位置

以前交换数组中元素是使用swap方法,传入两个要交换位置的inout修饰的元素

现在swift4的Array自己有了swapAt方法,直接传入两个下标位置即可

Swift3
Swift4

你可能感兴趣的:(Swift4 的变化列举)