zoukankan      html  css  js  c++  java
  • swift 3.0 新特征

    ##限定作用域访问级别:

    在swift 3.0 之前,swift 提供3种不同的访问级别: 1.public(公开) 2.internal(内部) 3.private(私用) 默认的访问级别是internal,这意味着此成员只能在模组(module)内可见。如果要让其能够被模组外的成员访问,那么就要将其设置成public。此外就是private,这意味着私有成员能够在文件内部可见。

    在swift 3.0当中,我们将迎来另外一种访问级别,private 将会被重新命名为 fileprivate :即文件的私有成员只能够在文件内部可见;我们将得到第四种访问级别就是 private ,这也就说即使在同一个文件当中,私有成员也只能够在对应的作用域当中可见。因此,swift 3.0中,最终的访问级别就是: 1.public(公开) 2.internal(内部) 3.fileprivate(文件内私有) 4.private(私有)

    ##移除 ++ 和 --

    自增运算符 ++ 与自减运算符 -- 将被移除,取而代之的便是 count+=1 与 count-=1 例如:

    while count < 10{
    	count += 1
    }
    
    while num < 10{
    	num -= 1
    }
    

    将inout 声明调整为类型修饰

    参数是一种不可修改的拷贝,如果你想修改你的传入参数,并禁止拷贝的,那么您可以将其声明为 inout . 在swift 2.2中:

    func myfunction(inout input:Int){
    
    }
    

    而在swift 3.0中,将调整为类型修饰,如;

    func myfunction(input : inout Int){
    
    }
    

    inout 限制为只能获取 @noescape 的上下文

    inout的另一个改变,是其的捕获机制受到限制。

    func escape(f:()->()){}
    
    func example(x :inout Int){
    	escape{ _ = x }
    }
    

    一个名为 escape()的函数,它接受一个方法作为其参数。在 example() 方法当中,我们引入 inout 类型的 x 的参数,并将其传递到 escape方法内。

    当 escape() 函数对 inout x 进行操作时,会造成一个问题,由于 inout 的开销很大。inout 会对传入的变量进行修改 ,而这个时候,并不确定 example()函数是否能够调用其作用域之外的函数。

    为了解决这个问题,我们可以使用 @noecape 来标记:

    func escape( f:@noecape()->()){
    
    }
    
    //swift 3.0之前的写法:
    func escape(@noescape f:()->()){
    
    }
    
    func exmaple(x:inout Int){
       escape{ _ = x}
    }
    

    这也就意味着,我将告诉编译器,我传递的这个函数 不会使用任何作用域范围之外的东西,因此程序能够正常运行。

    将 @noescape 和 @autoclosure 转化成类型特质

    func escape(f: @noescape ()->()){
    
    }
    
    func noEscape(f :@autoclosure ()->()){
    
    }
    

    ##将用于关联类型声明的 typealias 替换成 associatedtype

    protocol Prot{
        associatedtype Container : SequenceType
    }
    

    这表示您需要明确告知Container 随后会关注哪种类型

    extension prot{
    	typealias Element = Container.Generator.Element
    }
    

    这种用法与 #define 类似 [TOC]

  • 相关阅读:
    安卓面试人人面向源码开发(一)
    Kotlin常见用法
    安卓触摸事件调度顺序
    自定义view 可自动换行滑动的LinearLayout
    屏幕适配那些事一篇带你搞定,出发与结论点独特适合新手。欢迎收藏
    初识位域
    简单区分Vmware的三种网络连接模式(bridged、NAT、host-only)
    刚开始学Python,坚持下去
    FAT AP 与 FIT AP的特点和区别
    BSSID,SSID,ESSID区别
  • 原文地址:https://www.cnblogs.com/crash-wu/p/5863017.html
Copyright © 2011-2022 走看看