Styleable

一个使用 UIKit 的 SwiftUI 声明式替代方案

安装

Swift Package Manager (SPM)

要使用 Swift Package Manager 安装 Styleable,您可以按照 Apple 发布的教程,使用 Styleable repo 的 URL 和当前版本

  1. 在 Xcode 中,选择 “File” → “Swift Packages” → “Add Package Dependency”

  2. 输入 https://github.com/radu-costea/Styleable.git

介绍

Styleable 为旧的 UIKit 增加了一些糖分,使其外观和感觉几乎与 SwiftUI 相同。 这并不打算替代 SwiftUI,而是旨在帮助使过渡更平滑,并减少沿途的风险。

开始使用

Styleable 利用 UIStackViews 的强大功能和 @resultBuilders 的便利性,以允许以人类可读的方式构建 UI 结构。

Styleable 的核心组件

VStackView

UIStackView 的一个子类,其轴向锁定为 .vertical,并允许使用 result builders 用于 arrangedSubviews

HStackView

UIStackView 的一个子类,其轴向锁定为 .horizontall,并允许使用 result builders 用于 arrangedSubviews

ZStackView

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")
    }
}

更多示例即将推出..