美文网首页
swift3.0 新认识的几个关键字

swift3.0 新认识的几个关键字

作者: 悦思 | 来源:发表于2017-02-08 11:28 被阅读62次

    http://mp.weixin.qq.com/s?__biz=MzAxMzE2Mjc2Ng==&mid=2652155868&idx=3&sn=4f578caf8c64229558832038d61623c0&chksm=8046cfbdb73146ab86804cd1dc996894fc99cfb005101b4e872ba812c96ded925ab838c30697&mpshare=1&scene=1&srcid=0207XJe64WV2wj3rDacNZ6iw#rd

    读了这篇文章新认识几个关键字在此做一下纪录:

    1 @discardableResult

    @discardableResult
    
    prefix func ++(x: inout Int) -> Int {
    
        x += 1
    
        return x
    
    }
    
    

    使用于带有返回值的函数,当不使用的时候不会再显示warning

    2 inout

    同样看上面的代码,inout修饰的变量会影响外部,参考OC的 __block, 类似C的&参数地址传递, 解释如下:

    Swift 中 struct 是值类型的。

    何为值,值是不能改变的,是immutable的,任何对值的修改其实就是新构造了一个来替换原来的。这里的inout也是如此,并不是传了地址进来,而是在这里构造了一个新的结构体,当函数结束时会复制回去替换原来的结构体。

    当然,这个复制并不一定会真的复制。Swift 的copy on write也会分情况,当值类型的引用只有一个时是不会复制的,这段在猫神的书里有提到。

    3 prefix & postfix

    这个简单,是自定义运算符的时候使用 prefix->前置;postfix->后置。

    4 defer

    @discardableResult
    
    postfix func ++(x: inout Int) -> Int {
    
        defer {
    
            x += 1
    
        }
    
        return x
    
    }
    
    

    defer是标志延迟执行的代码块。上面的代码块就是先return再执行defer,类似swift的错误处理final最后执行。可想而知如果return的是一个函数,那么defer也在函数执行后才会执行。

    相关文章

      网友评论

          本文标题:swift3.0 新认识的几个关键字

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