技术控

    今日:126| 主题:49390
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] Defer; defer; defer

[复制链接]
什麽者β不懂 发表于 7 天前
72 0

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有人问到关于 defer 的用法,以及 defer 语句被添加到栈里面的顺序。这可以很简单的创建一个类似于    这样的测试集,然后你就可以自己观察他们的行为。  
  接下来,通过通俗易懂的方式说明了如何在某些场景使用 defer :
  设置和清理工作成对出现的时候。比如说,当你在为 iOS 10 预览版开发的时候,可能需要开始和结束 image contexts。当然, defer 也很适合 alloc/dealloc, fopen/fclose 等操作。  
           
  1. UIGraphicsBeginImageContext(size); defer { UIGraphicsEndImageContext() }
复制代码
       前置或者后置增量操作的时候。通过 defer 操作可以让变量在发生改变前返回:  
           
  1. defer { x = x - 1 }; return x // x--
复制代码
       应用“下个状态”更新。在 sequence 语句里面使用 defer,像下面这个例子一样,循环遍历一个色环:  
           
  1. return sequence(state: hue, next: {
  2.      (state : inout CGFloat) -> Color? in
  3.      defer { state = state + stepAngle }
  4.      ...
  5.      return value }
复制代码
       优化分组布局的代码。这个例子是将一组图片画在同一条直线上。实际绘制的代码做了很多繁琐的工作。将    defer语句置于    forEach顶部有助于追踪“下一步”,而无需搜寻整个实际布局的代码。  
           
  1. allImages.forEach { image in
  2.     defer { px += image.size.width + spaceOffset }
  3.     image.draw(at: CGPoint(x: px, y: py))
  4. }
复制代码
       很方便,不是吗?
  本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问http://swift.gg。
友荐云推荐




上一篇:一个CMS案例实战讲解PHP代码审计入门
下一篇:值得拥有 不容错过的Hive精华汇总
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表