写点什么

一个小而美的 Swift 框架:Then

用户头像
关注
发布于: 3 小时前
一个小而美的 Swift 框架:Then

Then 是一个代码量很少,但是我经常用的 Swift 框架。


Then 的作者为 Suyeol Jeon。正如作者的状态 Always coding 一样,他在 GitHub 上的 contributions 绿油油的一片。正如作者的描述那样:A lazy programmer 😴,Then 确实会让人变「懒」。

Then 框架

Then 是一个 Swift 初始化器的语法糖,简化了初始化(或者修改属性)的代码量。


Then 框架非常简单,代码量在 60 行左右。

then()

Then 框架对 NSObject 扩展一个 then() 方法。下面是官方提供的一个示例:


let label = UILabel().then {    $0.textAlignment = .center    $0.textColor = .black    $0.text = "Hello, World!"}
复制代码


它等价于:


let label: UILabel = {    let label = UILabel()    label.textAlignment = .center    label.textColor = .black    label.text = "Hello, World!"    return label}()
复制代码


通过对比两块代码,可以明显的感觉到:


  1. 我们可以省去对一个局部变量进行命名。在初始化一个具体的实例后,直接在 then 的 block 中修改其属性就可以了。

  2. 在通过变量名进行检索时,可以快速的跳过同一部分的代码。例如,当我们用关键字 label 进行搜索时,第一部分的代码有 2 处匹配,第二部分的代码有 8 处匹配。

  3. 使用 then 之后,在写代码时,可以清楚的将对一个实例的修改放在一个 block 中,阅读代码时,也一目了然。


另外,对于自定义的类、结构体,可以通过扩展 Then 协议,来使用 then():


extension MyType: Then {}
let instance = MyType().then { $0.really = "awesome!"}
复制代码


Then 还提供了 do()with() 方法。

do()

UserDefaults.standard.do {    $0.set("devxoul", forKey: "username")    $0.set("devxoul@gmail.com", forKey: "email")    $0.synchronize()}
复制代码


do() 可以减少代码的键入量。do()then() 的区别就是,do() 没有返回值,then() 会返回 self。


可以想象一下如果不用 do,上面的代码会出现多少个 UserDefaults.standard

with()

let newFrame = oldFrame.with {    $0.size.width = 200    $0.size.height = 100}newFrame.width // 200newFrame.height // 100
复制代码


with() 为创建一个新值,对新值进行修改。

总结

Then 框架一共提供了三个方法,用于减少代码量:


  • then() 用在初始化实体时(有返回值)

  • do() 用在设置属性(无返回值)

  • with() 对一个值形的实例进行复制,修改新实例的属性,返回修改后的实例。

用户头像

关注

还未添加个人签名 2017.10.17 加入

还未添加个人简介

评论

发布
暂无评论
一个小而美的 Swift 框架:Then