鹤岗市网站建设_网站建设公司_PHP_seo优化
2025/12/21 16:38:10 网站建设 项目流程

一、Then 库的核心概念

Then 是一款轻量级的 Swift 第三方库,核心作用是为任意类型(结构体、类、枚举等)提供一个then方法,让你可以在创建对象后直接链式配置属性,替代繁琐的 "先创建对象、再逐行赋值" 的写法。
简单来说,它把这样的冗余代码:
swift
let label = UILabel()
label.text = "Hello"
label.textColor = .red
label.font = UIFont.systemFont(ofSize: 16)
label.frame = CGRect(x: 20, y: 40, width: 200, height: 30)
 
变成更优雅的链式代码:
swift
let label = UILabel().then {$0.text = "Hello"$0.textColor = .red$0.font = UIFont.systemFont(ofSize: 16)$0.frame = CGRect(x: 20, y: 40, width: 200, height: 30)
}
 

二、安装 Then 库

Then 支持 CocoaPods、Swift Package Manager(SPM)等主流安装方式,最常用的是 SPM(Xcode 内置,无需额外工具):

1. Swift Package Manager(推荐)

  • 打开 Xcode 项目 → 点击项目文件 → 选择 "Package Dependencies" → 点击 "+"。
  • 输入 Then 的仓库地址:https://github.com/devxoul/Then
  • 选择最新版本,点击 "Add Package" 完成安装。

2. CocoaPods

Podfile中添加:
ruby
 
 
 
 
 
pod 'Then'
 
然后执行终端命令:
bash
 
运行
pod install
 

三、Then 库的基础用法

1. 基础对象配置(最核心场景)

适用于 UIKit 控件、自定义类、结构体等所有类型,核心是then方法接收一个闭包,闭包参数是对象本身($0):
swift
import UIKit
import Then// 1. UI控件配置(最常用)
let button = UIButton(type: .system).then {$0.setTitle("点击我", for: .normal)$0.setTitleColor(.white, for: .normal)$0.backgroundColor = .blue$0.layer.cornerRadius = 8$0.frame = CGRect(x: 20, y: 100, width: 120, height: 40)
}// 2. 自定义类配置
class Person {var name: String = ""var age: Int = 0var hobby: [String] = []
}let person = Person().then {$0.name = "张三"$0.age = 25$0.hobby = ["读书", "编程"]
}// 3. 结构体配置
struct Book {var title: Stringvar price: Double
}let book = Book(title: "", price: 0).then {$0.title = "Swift编程"$0.price = 89.9
}
 

2. do方法(无返回值的配置)

如果不需要返回对象(仅想链式执行配置),可以用do方法(效果和then一致,只是闭包无返回值):
swift
// 场景:给已存在的对象做配置
let view = UIView()
view.do {$0.backgroundColor = .gray$0.frame = CGRect(x: 0, y: 0, width: 300, height: 200)
}
 

3. 可选类型的配置

Then 也支持可选类型(Optional),通过then配置时会自动解包(仅当可选值非 nil 时执行闭包):
swift
// 可选UIView
var optionalView: UIView? = UIView()
optionalView?.then {$0.backgroundColor = .yellow
}// 若可选值为nil,闭包不会执行
var nilView: UIView? = nil
nilView?.then {$0.backgroundColor = .black // 不会执行
}
 

四、Then 库的进阶场景

1. 结合数组 / 集合使用

可以批量配置数组中的对象:
swift
// 创建并配置多个标签
let labels = (0..<3).map { index inUILabel().then {$0.text = "标签\(index + 1)"$0.textAlignment = .center$0.frame = CGRect(x: 20, y: 150 + CGFloat(index * 40), width: 100, height: 30)$0.backgroundColor = .lightGray}
}
 

2. 自定义类型扩展(让 Then 更贴合业务)

可以给自定义协议 / 类扩展 Then 的能力(虽然 Then 已默认支持所有类型,但可封装通用配置):
swift
 
// 扩展UIButton,封装通用样式
extension UIButton {func configPrimaryButton() -> Self {return then {$0.setTitleColor(.white, for: .normal)$0.backgroundColor = .systemBlue$0.layer.cornerRadius = 6$0.titleLabel?.font = .systemFont(ofSize: 15, weight: .medium)}}
}// 使用封装的配置
let primaryButton = UIButton().configPrimaryButton().then {$0.setTitle("主按钮", for: .normal)$0.frame = CGRect(x: 20, y: 250, width: 150, height: 44)
}
 

3. 结合闭包捕获值

then闭包中可以捕获外部变量,实现动态配置:
swift
let baseY: CGFloat = 300
let buttonCount = 2for i in 0..<buttonCount {let btn = UIButton().then {$0.setTitle("动态按钮\(i+1)", for: .normal)$0.frame = CGRect(x: 20, y: baseY + CGFloat(i * 50), width: 120, height: 40)$0.backgroundColor = .systemGreen}// 假设添加到视图// view.addSubview(btn)
}
 

五、Then 库的优势与适用场景

优势:

  1. 代码更简洁:把分散的属性赋值整合到链式闭包中,减少临时变量和冗余代码。
  2. 可读性更高:对象创建和配置逻辑集中,一眼就能看出对象的完整配置。
  3. 类型安全:闭包内的$0自动推导类型,享受 Xcode 的自动补全,避免手写对象名出错。
  4. 轻量级:源码只有几百行,无额外依赖,接入成本极低。

适用场景:

  • UIKit 控件的初始化配置(iOS 开发最核心场景)。
  • 自定义类 / 结构体的批量属性赋值。
  • 测试代码中快速创建配置好的对象。
  • 任何需要 "创建 + 配置" 两步操作的场景。

总结

  1. 核心功能:Then 库为 Swift 任意类型提供then/do方法,实现对象创建与配置的链式写法,替代逐行赋值的冗余代码。
  2. 核心用法对象.then { $0.属性 = 值 }$0代表对象本身,支持所有类型(包括可选类型)。
  3. 核心优势:代码更简洁、可读性更高,尤其适合 UIKit 控件配置,是 iOS 开发中提升编码效率的经典语法糖。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询