当前位置:网站首页 > Swift编程 > 正文

Swift链式编程

前言

今天我们来学习一下 Swift 实践方面的一个技巧,那就是链式编程。链式代码在 Swift 中有着比 Objective-C 天然的优势,而且通过 Swift 语言本身强大的特性,只需要很少的代码就可以让自己的 Swift 工程具有编写链式 UI 代码的能力。

什么是链式编程

本质上链式编程就是调用一个方法的时候,这个方法的返回值是这个类的指针,然后可以再对这个指针进行下一步操作。于是在代码上就会呈现一种链条式的方法调用,就是所谓的链式编程。在C++和Java中会被较多使用。

为什么选择链式编程

链式编程让代码有更清晰有逻辑的结构,大大提高了代码可读性。我们今天就是主要讲一下swift项目中UI代码如何实现链式编程。

实现思路分析

先来分析一下 UI 布局代码的结构。翻出一段使用代码完成的 UI 布局代码看一看,你会发现其中的一些特定的结构。

第一步肯定是会初始化一个 view,接下来通过一系列步骤完成需求:添加到父 view、添加视图约束、配置属性。

除了初始化 view 这个步骤,将其后的三个步骤抽取出来,做成三个通用的链式布局函数,将这三个函数使用 extension 机制扩展到 UIView 中。那么在controller中创建view时就可以使用链式代码实现view的布局了。具体extension中的实现代码如下:

import UIKit import SnapKit protocol ViewChainable {} extension ViewChainable where Self: UIView { @discardableResult func config(_ config: (Self) -> Void) -> Self { config(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 } }

以上就是完成链式 UI 布局的所有代码。这里布局第三方库我使用的是SnpKit,如果你使用的是其他库(比如PureLayout、SDAutoLayout)则自己稍加修改下即可。实现思路也很好理解,比较难理解的是 config 函数的实现,可以看到这里定义了一个名为 ViewChainable 的协议,然后对这个协议做了一个扩展,并让 UIView 实现了这个协议。这么做的原因在于,为了让 config 函数的闭包参数在实际使用中,闭包的第一个参数类型可以具体到 UIView 的不同子类上。拿上面的例子来说,UILabel 的实例在调用 config 函数时,所需的闭包参数类型就是 (UILabel) -> Void 而不是 (UIView) -> Void

用法举例

来个样例说明用法,比如,我们要在一个 view 中添加一个 label,这个 label 水平居中,它的 top 与父 view 的 top 相距 80。代码如下:

let label = UILabel() .adhere(toSuperView: view) .layout { (make) in make.top.equalToSuperview().offset(80) make.centerX.equalToSuperview() } .config { (label) in label.backgroundColor = UIColor.clear label.font = UIFont.systemFont(ofSize: 20) label.textColor = UIColor.darkGray label.text = "Label" }

那么这段样例代码有什么好处呢?首先,从这段代码中,可以明显看到 UI 布局的步骤,而且添加约束和配置 view 的具体逻辑代码,被不同的 Closure 封装起来。代码的结构要比之前更清晰

进阶

如果你对响应式编程感兴趣,你会发现 RxSwift 这个框架和上面的链式布局代码简直是绝配。RxSwift 这个库本身也是支持很多链式调用的。关于 RxSwift,这又是另外一个大坑了,自己有兴趣的可以去学习一下。

版权声明


相关文章:

  • swift编程书籍推荐_swift编码查询2024-11-04 00:24:38
  • swift编程语言中文版_python编程入门教学2024-11-04 00:24:38
  • swift 编程_swift代码官网查询2024-11-04 00:24:38
  • swift编程需要什么基础_swift菜鸟教程2024-11-04 00:24:38
  • js权威指南第7版 pdf_swift菜鸟教程2024-11-04 00:24:38
  • 两周学习swift编程及实战报告(持续更新中)2024-11-04 00:24:38
  • swift编程权威指南(第3版)_编程自学教程2024-11-04 00:24:38
  • 如何开始学习Swift编程?2024-11-04 00:24:38
  • Swift编程语言学习资料汇总_swift编程教学2024-11-04 00:24:38
  • Swift - 创建Objective-C桥接文件_C两个文件的内容合并到一个2024-11-04 00:24:38
  • 全屏图片