尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Swift:优雅又强大的语法糖——Then库

Swift:优雅又强大的语法糖——Then库
📅 发布时间:2026/6/19 22:07:13

一、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 开发中提升编码效率的经典语法糖。

相关新闻

  • Introducing Qwen-Image-Layered: A Free AI Photoshop Alternative for Image Layer Editing
  • LeetCode华为大模型岗刷题 - 指南
  • 揭秘Open-AutoGLM与Applitools核心差异:5大维度全面对比

最新新闻

  • 智能体资源激增,智能体资源发现规范(ARD)如何解决发现难题?
  • Windows和Office激活难题终极解决方案:KMS智能激活脚本完整指南
  • 2026香港装修公司哪家好?设计情报中心值得推荐 - 资讯速览
  • Unity Mod Manager:游戏模组管理的终极技术架构解决方案
  • LVGL布局进阶:从Flex到Grid构建复杂界面
  • 2026年AI生产力实操地图:四类高鲁棒性工具落地指南

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号