SwiftUI 动态表单
swiftui-dynamic-forms
该包处于早期 alpha 阶段(原型阶段)
从终端运行以生成示例make workspace
.xcworkspace
待办事项
- 组件
-
DynamicText
-
DynamicButton
-
DynamicStack
-
DynamicTextField
-
DynamicTextView
-
DynamicSpacer
-
DynamicImage
-
DynamicConfirmationDialog
-
DynamicAlert
-
DynamicDragField
-
DynamicDropField
-
- 特征
- 可编码支持
- 自定义修改器
- 待思考
- 状态管理的 API 改进
- 操作处理的 API 改进
- 用于自定义视图的 API
- 派生(可选/集合)的帮助程序
Binding
- 将目标分为目标和目标
DynamicForms
DynamicForms
DynamicFormsUI
用法
-
进口
DynamicForms
-
声明动态表单模型
DynamicForm { DynamicStack(.vertical) { DynamicText("Title").bold() DynamicText("Description") DynamicStack(.horizontal) { DynamicText("State: ") DynamicText("Initial") } DynamicStack(.horizontal) { DynamicButton( DynamicText("OK"), action: "content.ok" ) DynamicButton( DynamicText("Cancel"), action: "content.cancel" ) } } }
Equivalent for
VStack { Text("Title").bold() Text("Description") HStack { Text("State: ") Text("Initial") } HStack { Button { DynamicFormClient.shared.send("content.id") } label: { Text("OK") } Button { DynamicFormClient.shared.send("content.cancel") } label: { Text("Cancel") } } }
-
Specify body for your dynamic-form-based view using
DynamicFormView
DynamicFormView($form)
-
Handle button actions
// Returns AnyPublisher<Event, Never> where Event is // Event { // id: DynamicElementIdentifier // action: DynamicElementActionIdentifier // } DynamicFormClient.shared.publisher // Filters events and returns AnyPublisher<Void, Never> DynamicFormClient.shared.publisher( for: .init(id: "element", action: "tap") ) // Filters events by actionID and returns AnyPublisher<Void, Never> DynamicFormClient.shared.publisher( for: "actionID" )
Installation
Basic
You can add DynamicForms to an Xcode project by adding it as a package dependency.
- From the File menu, select Swift Packages › Add Package Dependency…
- Enter
"https://github.com/capturecontext/swiftui-dynamic-forms.git"
into the package repository URL text field - Choose products you need to link them to your project.
Recommended
If you use SwiftPM for your project, you can add StandardClients to your package file.
.package(
name: "swiftui-dynamic-forms",
url: "https://github.com/capturecontext/swiftui-dynamic-forms.git",
.branch("main")
)
Do not forget about target dependencies:
.product(
name: "DynamicFormss",
package: "swiftui-dynamic-forms"
)
License
This library is released under the MIT license. See LICENSE for details.