Swift Then 庫是一款輕量級的 Swift 工具庫,核心作用是通過閉包語法糖簡化對象初始化與配置流程,讓代碼更簡潔、可讀性更強,尤其適合 UIKit 控件創建、模型配置等場景。以下是其核心特性與使用指南:

一、核心功能與優勢

  1. 統一的配置接口為所有類型擴展then方法,通過閉包直接配置對象屬性,替代傳統的 “初始化 + 逐行賦值” 模式。例如:

    swift
// 傳統方式
let button = UIButton()
button.setTitle("Submit", for: .normal)
button.setTitleColor(.white, for: .normal)
button.backgroundColor = .blue
button.layer.cornerRadius = 8

// 使用Then庫
let button = UIButton().then {
    $0.setTitle("Submit", for: .normal)
    $0.setTitleColor(.white, for: .normal)
    $0.backgroundColor = .blue
    $0.layer.cornerRadius = 8
}
  1. 支持可選類型與集合不僅支持非可選對象,還適配可選類型(Optional)和集合(Array/Dictionary)的配置:swift
// 可選對象配置
let label: UILabel? = UILabel().then {
    $0.text = "Hello"
    $0.font = .systemFont(ofSize: 16)
}

// 數組配置
let numbers = [1, 2, 3].then {
    $0.append(4)
    $0.removeFirst()
} // 結果:[2, 3, 4]
  1. 鏈式調用兼容可與其他鏈式語法(如 SnapKit 佈局)無縫結合,進一步簡化代碼:swift
let view = UIView().then {
    $0.backgroundColor = .gray
}.snp.makeConstraints { make in
    make.center.equalToSuperview()
    make.size.equalTo(100)
}

二、安裝方式

  1. Swift Package Manager(推薦)在 Xcode 中通過File > Add Packages,輸入倉庫 URL:

    plaintext
https://github.com/devxoul/Then

選擇最新版本即可集成。

  1. CocoaPodsPodfile中添加:ruby
pod 'Then'

執行pod install完成安裝。

三、高級用法

  1. 自定義類型擴展即使是自定義模型,也能通過Then協議快速配置:swift

struct User {
    var name: String = ""
    var age: Int = 0
}

// 使用then配置
let user = User().then {
    $0.name = "Alice"
    $0.age = 25
}
  1. 與 RxSwift 結合在響應式編程中簡化對象配置:swift
let button = UIButton().then {
    $0.setTitle("Click", for: .normal)
}
button.rx.tap
    .subscribe(onNext: { print("Tapped") })
    .disposed(by: disposeBag)

四、設計理念與適用場景

  • 理念:借鑑 Kotlin 的apply函數,通過閉包 “內聯配置” 減少臨時變量和冗餘代碼,讓初始化邏輯更集中。
  • 適用場景
  • UIKit 控件創建(按鈕、標籤、視圖等);
  • 模型對象的快速初始化與屬性賦值;
  • 第三方庫實例的配置(如網絡請求對象、數據庫實例)。

五、注意事項

  • 屬於語法糖工具,核心功能僅簡化代碼結構,無性能損耗;
  • 配置邏輯不宜過於複雜(如包含大量業務判斷),否則會降低可讀性;
  • 與 SwiftUI 兼容性較弱(SwiftUI 本身通過modifier實現鏈式配置),更適用於 UIKit 開發。

整體而言,Then 庫以極小的體積(僅幾十行代碼)大幅提升 Swift 代碼的簡潔性,是 iOS 開發中輕量化的效率工具,尤其適合追求代碼優雅性的開發者。