Exhibition 是一个用于展示和调试 SwiftUI 组件库的框架和生成器。
https://github.com/mjarvis/Exhibition
添加到你的项目中。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")
)
}
}
Sourcery
以生成你的 Exhibition: sourcery --sources Your/Source/Path --templates Exhibition.swifttemplate --output ./Sources/Generated
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)