GMTC2016-Swift面向协议编程技术细节与工程演练.pdf

GMTC2016-Swift面向协议编程技术细节与工程演练.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Swift面向协议编程技术细节与工程 演练 北京世纪好未来教育科技有限公司 研发工程师 陈刚 面向协议编程之前的协议 • OCSwift2.0版本之前,协议是没有实现的 ,协议的用法大致就是:delegate、 datasource。 • 比如最常用的“点赞”功能,在cell上放置按 钮,覆盖cell的用户响应、保留按钮的用户 响应。 • 用户点击按钮后需要修改数据源的状态。 面向协议编程之前的协议 • 按钮的定义在cell的子类中,IBAction也在定 义在cell的子类中,而数据源却在Controller 的子类中。 • 需要解决的问题是:如何把按钮的点击事件 传递给Controller的子类。 • 写一个delegate协议,请看工程演示。 面向协议编程之前的协议 • 让我们来分解一下上面的操作: • 1.声明一个Deleagte协议,这个协议可能只用到一次 • 2.在cell 中定义可选型类型的属性,把1中定义的协议 作为类型使用。 • 3.Controller子类遵循自定义的Delegate协议,并定义具 体实现。 • 4.在获得每个Cell的实例的时候,指定实例的delegate 属性为Controller,实现绑定。 面向协议编程之前的协议 • 更加Swift化的方案:使用闭包替代协议。 • 请看工程演示。 面向协议编程之前的协议 • 使用闭包的步骤分解: • 1.向定义其他类型的属性一样,定义一个闭 包并定义初始值(一般都是空操作)。 • 2.在controller子类中为闭包属性重新赋值。 面向协议编程之前的协议 • 在Swift 中闭包(当然还有函数和方法)是“ 一级公民”,补充一些闭包的知识。 • 使用闭包的好处: 1.步骤更简单,可读性强 2.代码耦合度更高,避免跨越代码,增加无意义的 理解成本 面向协议编程之前的协议 • 使用闭包的注意事项: • 闭包和类一样,也是引用类型的,会持有内部的对象,所以有“循环引 用”的风险。在示例中使用了“捕获列表”来避免“循环引用”。不过不需 要太过担心,苹果的官方文档中有说明,闭包只在特定情况下才有出 现“循环引用”的风险。 • 方法中的闭包参数不会出现“循环引用”的风险。需要注意的是,如果 方法体中有循环调用某个闭包参数的代码,经常在参数列表中为闭包 参数加上@noescape关键字。@noescape 的主要目的是避免在循环中不 断引用相同的闭包,升内存利用率。标准库中CollectionType协议中 的map、filter等常用的方法都是基于@noescape 的。 面向协议编程之前的协议 • 捕获列表是API的使用者在使用时添加的, 使用者需要明确“循环引用”的触发条件,避 免添加无意义的关键字。 • @noescape是API的开发者在定义时加入的, 在使用闭包时{} 中不会要求加入self关键字, API的使用者可以不用关心@noescape。 面向协议编程之前的协议 • 来明确一下“循环引用”风险的触发条件。 • 方法和函数都是以“名称”为第一标识符的,然后是参 数类型和返回值类型,作为一门强类型语言,参数 类型和返回值类型同时适用于方法重载。而闭包是 匿名的,如示例中所示,闭包单独使用时,需要作 为一个常量或者变量的类型使用,因此闭包自然而 然会成为某个数据类型的成员。如果持有闭包的是 类,那么会有“循环引用”的风险。这种情况需要特别 注意。 面向协议编程之前的协议 • 闭包作为方法参数时不会出现循环引用。 Swift 中的方法的实现方式很有趣,无论是类 型方法还是实例方法。闭包作为参数不会发 生循环引用是因为方法本身并不属于某个数 据结构,实例方法、构造器的实现机制是基 于“柯里化”的。 面向协议

文档评论(0)

xingyuxiaxiang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档