Exhibition

CI

Exhibition 是一个用于展示和调试 SwiftUI 组件库的框架和生成器。

灵感来源于 StorybookShowkase

安装

Swift Package Manager

  1. 通过 Xcode 将 https://github.com/mjarvis/Exhibition 添加到你的项目中。
  2. 安装 Sourcery
  3. 复制 Exhibition.swifttemplate 到你的项目

用法

  1. 修改你的 SwiftUI 预览以使用 ExhibitProvider
    import Exhibition
    
    struct Foo_Previews: ExhibitProvider, PreviewProvider {
        static var exhibitName: String = "Foo"
        static var exhibitSection: String = "Bar"
        
        static func exhibitContent(context: Context) -> some View {
            Foo(
                title: context.parameter(name: "title", defaultValue: "Title"),
                content: context.parameter(name: "content")
            )
        }
    }
  2. 运行 Sourcery 以生成你的 Exhibition: sourcery --sources Your/Source/Path --templates Exhibition.swifttemplate --output ./Sources/Generated
  3. 在一个 swift 视图中显示 Exhibition()

自定义布局

如果你希望你的展品具有一些自定义布局,ExhibitProvider 中有一个可选函数可以实现。

这是一个在 List 中嵌入展品的例子

static func exhibitLayout(content: AnyView) -> some View {
    List {
        content
    }
}

你也可以在此处提供自定义 View 以提供演示示例

struct CustomLayout<Content: View>: View {
    let content: Content
    
    @State var isPresented: Bool = false
    
    var body: some View {
        Button("Open") {
            isPresented = true
        }
        .sheet(isPresented: $isPresented) {
            content
        }
    }
}

static func exhibitLayout(content: AnyView) -> some View {
    CustomLayout(content: content)
}

自定义参数视图

Exhibition 支持调试菜单参数列表中的多种类型。你可以添加你自己的任意类型以及一个视图来修改参数,或者覆盖现有类型的视图。遵循 ParameterView 协议,并通过 Exhibition 上的 .parameterView 修饰符传入类型。

struct DoublingStringParameterView: ParameterView {
    let key: String
    @Binding var value: String
    
    var body: some View {
        Button(key) {
            value += value
        }
    }
}

Exhibition()
    .parameterView(DoublingStringParameterView.self)