美文网首页Swift
Swift4 的变化列举

Swift4 的变化列举

作者: FKSky | 来源:发表于2017-07-10 10:31 被阅读150次

    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 4

    4.类和协议的组合

    现在我们能将类和协议组合起来变成一个新的类型,比如我们可以限定我们的方法接受的参数必须是"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

    相关文章

      网友评论

        本文标题:Swift4 的变化列举

        本文链接:https://www.haomeiwen.com/subject/ilryhxtx.html