关于swift(3.3) 链式编程的理解
来源:互联网 发布:买家淘宝退款率高咋办 编辑:程序博客网 时间:2024/05/29 09:27
这是一个controller ,废话不多说直接上代码
import UIKitimport SnapKitprotocol ViewChainable {}class TestPushVC: UIViewController { override func viewDidLoad() { super.viewDidLoad() self.view.backgroundColor = UIColor.red self.navigationItem.title = "标题" _ = UILabel() .adhere(toSuperView: view) .layout { (make) in make.top.equalToSuperview().offset(80) make.centerX.equalToSuperview() } .config { (label) in 标记A: label.backgroundColor = UIColor.clear label.font = UIFont.systemFont(ofSize: 20) label.textColor = UIColor.darkGray label.text = "你好" } }}extension ViewChainable where Self:UIView { @discardableResult // 消除警告 //“如果一个闭包表达式作为函数调用的最后一个实参,尾随闭包” func config(_ config1: (Self) ->Void) -> Self { 标记B: config1(self) return self }}extension UIView:ViewChainable { func adhere(toSuperView: UIView) -> Self { toSuperView.addSubview(self) return self } @discardableResult func layout(snapKItMaker: (ConstraintMaker) ->Void) -> Self { self.snp.makeConstraints { (make) in snapKItMaker(make) } return self }}
这是大神们解说的其中一段话:
config 函数的实现,可以看到这里定义了一个名为 ViewChainable 的协议,然后对这个协议做了一个扩展,并让 UIView 实现了这个协议。这么做的原因在于,为了让 config 函数的闭包参数在实际使用中,闭包的第一个参数类型可以具体到 UIView 的不同子类上。拿上面的例子来说,UILabel 的实例在调用 config 函数时,所需的闭包参数类型就是 (UILabel) -> Void 而不是 (UIView) -> Void。
链式表面上看就是点语法的实现,要想自己实现点语法,要用extension 扩展。
从 标记B 到 标记A 是顺序实现: 先调用函数config 接着内部 调用闭包 ->调用自己代码逻辑
阅读全文
0 0
- 关于swift(3.3) 链式编程的理解
- 链式(响应式)编程的简单理解
- Swift编程语言入门视频教程(八)--?与!的理解
- 高逼格的block(链式编程思想 )
- Block的链式编程
- 我的链式编程
- 关于编程范式的理解
- 解析jQuery的链式编程
- 进击的KFC:链式编程
- 关于类的理解(面向对象编程的核心)
- 关于计算机编程的一点理解(4)
- 关于计算机编程的一点理解(5)
- 关于计算机编程的一点理解(6)
- 关于计算机编程的一点理解(7)
- ios开发关于多线程编程的理解(一)
- ios开发关于多线程编程的理解(二)
- Swift学习笔记--关于swift中In-Out关键字的理解
- 链式编程学习(二)
- [架构]复杂App MVC重构小结
- 201402 系统更新后 VS2010 的宏功能不能正常使用(如添加头注释)
- Linux 中 ssh host 代理配置及远程免密码登陆
- Android进程保活招式大全
- Oracle
- 关于swift(3.3) 链式编程的理解
- 大数据处理过程之核心技术ETL学习过程记录
- Opencv的reshape函数报错
- tensorflow笔记:模型的保存与训练过程可视化
- python
- 结合图库app开发谈谈Glide库使用心得
- class.getResourceAsStream与class.getClassLoader().getResourceAsStream
- spark 读取Oracle数据,做成文件并统计分析
- Nginx rewrite深入解读