网淘吧来吧,欢迎您!

Swiftui Ui Patterns技能使用说明

2026-03-29 新闻来源:网淘吧 围观:11
电脑广告
手机广告

SwiftUI 界面模式

快速开始

根据你的目标选择一条路径:

现有项目

  • 确定功能或屏幕以及主要的交互模型(列表、详情、编辑器、设置、标签页)。
  • 在代码仓库中通过rg "TabView\("或类似的搜索,找到相近的示例,然后阅读最接近的 SwiftUI 视图。
  • 应用本地约定:优先使用 SwiftUI 原生状态管理,尽可能保持状态局部化,并使用环境注入来处理共享依赖。
  • references/components-index.md中选择相关的组件参考,并遵循其指导。
  • 使用小而专注的子视图和 SwiftUI 原生数据流来构建视图。

新项目脚手架

  • references/app-scaffolding-wiring.md开始,以连接 TabView + NavigationStack + 表单。
  • 添加一个最小化的AppTab路由器路径基于提供的框架。
  • 首先根据您需要的UI选择下一个组件参考(TabView、NavigationStack、Sheets)。
  • 随着新屏幕的添加,扩展路由和sheet枚举。

遵循的一般规则

  • 使用现代SwiftUI状态(@State@Binding@Observable@Environment),并避免不必要的视图模型。
  • 优先采用组合方式;保持视图小巧且专注。
  • 使用async/await配合.task以及显式的加载/错误状态。
  • 仅在编辑遗留文件时维持现有的遗留模式。
  • 遵循项目的格式化器和风格指南。
  • Sheets:优先.sheet(item:)当状态表示一个选中的模型时使用。避免在sheet主体内部使用if let。Sheet应拥有自己的操作,并在内部调用dismiss(),而不是通过传递onCancel/onConfirm闭包来实现。创建新SwiftUI视图的工作流程

定义视图的状态及其所有权位置。

  1. 识别通过
  2. @Environment注入的依赖项。绘制视图层次结构,并将重复部分提取为子视图。
  3. 使用
  4. .task实现异步加载,并在需要时使用明确的状态枚举。当UI具有交互性时,添加无障碍标签或标识符。
  5. Add accessibility labels or identifiers when the UI is interactive.
  6. 通过构建进行验证,并在必要时更新使用站点。

组件参考

使用references/components-index.md作为入口点。每个组件参考应包含:

  • 意图和最佳适用场景。
  • 遵循本地惯例的最小使用模式。
  • 注意事项和性能说明。
  • 当前仓库中现有示例的路径。

表单模式

项目驱动表单(首选)

@State private var selectedItem: Item?

.sheet(item: $selectedItem) { item in
    EditItemSheet(item: item)
}

表单拥有其操作

struct EditItemSheet: View {
    @Environment(\.dismiss) private var dismiss
    @Environment(Store.self) private var store

    let item: Item
    @State private var isSaving = false

    var body: some View {
        VStack {
            Button(isSaving ? "Saving…" : "Save") {
                Task { await save() }
            }
        }
    }

    private func save() async {
        isSaving = true
        await store.save(item)
        dismiss()
    }
}

添加新的组件参考

  • 创建references/<组件>.md
  • 保持简短且可操作;链接到当前仓库中的具体文件。
  • 更新references/components-index.md以包含新条目。
免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第326290名访客 今日有221篇新文章/评论