一个使用 UIKit 的 SwiftUI 声明式替代方案
Swift Package Manager (SPM)
要使用 Swift Package Manager 安装 Styleable,您可以按照 Apple 发布的教程,使用 Styleable repo 的 URL 和当前版本
在 Xcode 中,选择 “File” → “Swift Packages” → “Add Package Dependency”
Styleable 为旧的 UIKit 增加了一些糖分,使其外观和感觉几乎与 SwiftUI 相同。 这并不打算替代 SwiftUI,而是旨在帮助使过渡更平滑,并减少沿途的风险。
Styleable 利用 UIStackViews 的强大功能和 @resultBuilders
的便利性,以允许以人类可读的方式构建 UI 结构。
UIStackView 的一个子类,其轴向锁定为 .vertical
,并允许使用 result builders 用于 arrangedSubviews
UIStackView 的一个子类,其轴向锁定为 .horizontall
,并允许使用 result builders 用于 arrangedSubviews
UIView 的一个子类,它将视图一个叠在另一个之上进行布局。 当需要容器视图或我们需要用一些填充来固定子视图时很有用。
一个 Style 封装了一些自定义,可以重用/应用于目标类型的任何对象。 这样,您可以定义一些样式并在需要时应用它们。 注意:您可以将任意数量的样式应用于一个视图。 样式按照它们传递的顺序应用。 因此,如果您想确保样式的自定义可见,请将其移动到列表的末尾。
注意:您还可以将祖先类的样式应用于任何自定义视图。
示例
一个登录表单
let view = ZStackView {
VStackView(spacing: 10) {
UITextField()
.with(\.placeholder, "Email")
.with(\.keyboardType, .emailAddress)
.with(\.borderStyle, .roundedRect)
UITextField()
.with(\.isSecureTextEntry, true)
.with(\.borderStyle, .roundedRect)
.with(\.placeholder, "Passsword")
}
}
使用样式
extension Style where Target: UITextField {
static var email: Self {
Style {
$0.keyboardType = .emailAddress
}
}
static var rounded: Self {
Style {
$0.borderStyle = .roundedRect
}
}
static var secure: Self {
Style {
$0.isSecureTextEntry = true
}
}
}
新的登录表单
let view = ZStackView {
VStackView(spacing: 10) {
UITextField()
.style(.rounded, .email)
.with(\.placeholder, "Email")
UITextField()
.style(.rounded, .secure)
.with(\.placeholder, "Password")
}
}
更多示例即将推出..