2017 Swift语言已经更新到了第4版,应该说Swift发展到现在这样才算相对稳定,不再是每一次更新对于开发者来说都像是半个新的语言一样,老的工程都要重新一点点的修改,虽然不至于像之前的变化那么大,但是也还是有一些改变的,下面就介绍可能会很常见的几点区别,以后也会经常更新
1.Private关键字
Swift3中的private属性或者方法都不能在extension扩展中被访问,就像下图这样是会报错的
如果我们用fileprivate来修饰属性或者方法的话,那么在同一个文件里面写的extension就能方法了,可是这种做法也有它的缺点,就是同一个文件里可以写不同的Class或者不同的Class的extension,他们也都能访问我们的TestClass下的fileprivate标记的属性方法。
现在到了Swift4之后就有了变化,上面这种在某个Class类的extension里就可以访问这个Class里面private标记的属性和方法了。但是注意这个extension必须跟Class写在同一个文件内,不然也是不能访问的!
2.可以直接对String进行index相关方法
以前对String单个字符做操作或者取坐标等等,都需要访问String的characters属性,现在在Swift4里就可以直接对String调用方法即可,区别见下图
3.开区间
比如以前我们表示一个区间会这样写1...5或者1..<5,可以看到它都需要明确写出一个下限和一个上限。现在Swift4允许你设定一个区间只有下限或者只有上限,比如...5或5...
现在你可以像下图这样,如果我要对一个数组从下标为2的开始遍历,直接使用2...即可
Output: 3 44.类和协议的组合
现在我们能将类和协议组合起来变成一个新的类型,比如我们可以限定我们的方法接受的参数必须是"A类"的对象且同时遵守"B协议",类和协议通过符号&组合起来
有一个叫Program的类和一个Testable的协议 此方法的参数必须是Program类且同时遵守Testable协议5.高阶方法map、filter的返回值类型
Dicitonary的filter高阶方法在以前返回的是一个新的数组,而现在返回的就是一个新的字典,区别看下图
swift3 swift4同时Dicitonary多了一个新的map方法,叫做mapValue,可以对字典里的每一个value进行遍历处理返回一个新的value,返回的也是一个新的Dicitonary
新方法mapValue举例 mapValue的输出结果PS:另外Set的filter方法返回的也将是一个新的Set而不是Array了
6.Dictionary的新方法grouping
swift4的Dicitonary多了一个叫grouping的新方法,将一个序列里的元素遍历一遍,然后每个元素返回一个所对应的key,然后将相同的key的元素放进一个数组作为这个key对应的value,最后返回一个分好组的Dictionary对象。
比如下面的列子,可以对一组人名进行分组,取出每个元素第一个字作为key
grouping方法 print打印结果7.swap方法交换数组内元素位置
以前交换数组中元素是使用swap方法,传入两个要交换位置的inout修饰的元素
现在swift4的Array自己有了swapAt方法,直接传入两个下标位置即可
Swift3 Swift4
网友评论