VDChain 是一个 Swift 库,它利用 @dynamicMemberLookup、KeyPath 和 callAsFunction 的强大功能来实现函数链式调用。 这简化了对象的修改,从而实现了更简洁、更清晰的代码。
首先在要使用它的文件中导入 SwiftChain
import VDChain
然后,您可以使用函数链式调用来修改您的对象。例如
let label = UILabel().chain
.text("Text")
.textColor(.red)
.font(.system(24))
.apply()
在此示例中,UILabel 的 text、textColor 和 font 属性通过函数链式调用进行设置。
您可以使用三种方法来使用 VDChain 创建链
使用 .chain 属性:VDChain 在任何 NSObject 类型上提供 .chain 属性。 您还可以通过实现 Chainable 协议将此属性添加到您自己的类型中。 此协议提供静态属性和实例属性,允许您直接在您的类型上调用 .chain。
let label = UILabel().chain
.text("Hello, World!")
.textColor(.red)
.apply()
使用后缀运算符 ~:您还可以使用 ~ 运算符创建链。 这是一种在任何值上开始链的简写方式,无需调用 .chain 属性或实现 Chainable 协议。
let button = UIButton()~
.title("Click me")
.titleColor(.blue)
.apply()
使用 EmptyChaining 或 TypeChaining:您可以使用 EmptyChaining 类创建一个空链。
let view = EmptyChaining(self).wrap()
.backgroundColor(.green)
.apply()
每个链方法都返回一个 Chain<...> 对象。 要从链中检索原始对象,只需使用 apply() 方法结束您的链即可。
VDChain 支持在类型和实例上进行链式调用。 您可以在类型上定义一系列方法链,并在以后在该类型的实例上使用此链
// Create a chain on the UILabel type that sets the text color to black
let blackColorModifier = UILabel.chain
.textColor(.black)
.apply()
// Use the chain on an instance of UILabel
let label = UILabel().chain
.modifier(blackColorModifier)
.apply()
这允许您在类型级别定义复杂的修改链,并根据需要轻松地将其应用于实例。
要查看 VDChain 的实际应用,请查看我的另一个库 VDLayout。
创建一个 Package.swift 文件。
// swift-tools-version:5.0
import PackageDescription
let package = Package(
name: "SomeProject",
dependencies: [
.package(url: "https://github.com/dankinsoid/VDChain.git", from: "3.6.0")
],
targets: [
.target(name: "SomeProject", dependencies: ["VDChain"])
]
)
$ swift build
将以下行添加到您的 Podfile
pod 'VDChain'
并首先从 podfile 目录运行 pod update。
dankinsoid, voidilov@gmail.com
VDChain 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE 文件。