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

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也在函数执行后才会执行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 4,201评论 1 10
  • Hello Word 在屏幕上打印“Hello, world”,可以用一行代码实现: 你不需要为了输入输出或者字符...
    restkuan阅读 3,367评论 0 6
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 4,108评论 0 6
  • 一直没有时间好好看一下swift,最近复习了一遍语法,这里记录swift学习过程中遇到的一些问题和要点,和Obje...
    bomo阅读 2,555评论 0 25
  • 我错了吗?我在坚持什么?难道只为给孩子多点爱也是错的吗?人家看到的都是钱!有谁知道我过的是什么样的日子?我不想去管...
    默晗玉阅读 97评论 0 0

友情链接更多精彩内容