返回顶部
s

swiftui-view-refactorSwiftUI视图重构

Refactor and review SwiftUI view files for consistent structure, dependency injection, and Observation usage. Use when asked to clean up a SwiftUI view’s layout/ordering, handle view models safely (non-optional when possible), or standardize how dependencies and @Observable state are initialized and passed.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
2,667
下载量
免费
免费
6
收藏
概述
安装方式
版本历史

swiftui-view-refactor

SwiftUI 视图重构

来源:复制自 @Dimillian 的 Dimillian/Skills(2025-12-31)。

概述

为 SwiftUI 视图应用一致的结构和依赖模式,重点关注顺序、模型-视图(MV)模式、谨慎的视图模型处理以及正确的 Observation 使用方式。

核心指南

1) 视图顺序(从上到下)

  • - 环境变量
  • private/public let 常量
  • @State / 其他存储属性
  • 计算属性 var(非视图相关)
  • init 初始化方法
  • body 属性
  • 计算视图构建器 / 其他视图辅助方法
  • 辅助方法 / 异步函数

2) 优先使用 MV(模型-视图)模式

  • - 默认采用 MV:视图是轻量级的状态表达式;模型/服务拥有业务逻辑。
  • 优先使用 @State、@Environment、@Query 以及 task/onChange 进行编排。
  • 通过 @Environment 注入服务和共享模型;保持视图小巧且可组合。
  • 将大型视图拆分为子视图,而不是引入视图模型。

3) 拆分大型 body 和视图属性

  • - 如果 body 超过一个屏幕或包含多个逻辑部分,将其拆分为更小的子视图。
  • 当大型计算视图属性(var header: some View { ... })携带状态或复杂分支时,将其提取为专门的 View 类型。
  • 可以将相关的子视图作为计算视图属性保留在同一文件中;仅在结构合理或需要复用时才提取为独立的 View 结构体。
  • 优先传递小型输入(数据、绑定、回调),而不是重用整个父视图状态。

示例(提取部分视图):

swift
var body: some View {
VStack(alignment: .leading, spacing: 16) {
HeaderSection(title: title, isPinned: isPinned)
DetailsSection(details: details)
ActionsSection(onSave: onSave, onCancel: onCancel)
}
}

示例(长 body → 短 body + 同一文件中的计算视图):

swift
var body: some View {
List {
header
filters
results
footer
}
}

private var header: some View {
VStack(alignment: .leading, spacing: 6) {
Text(title).font(.title2)
Text(subtitle).font(.subheadline)
}
}

private var filters: some View {
ScrollView(.horizontal, showsIndicators: false) {
HStack {
ForEach(filterOptions, id: \.self) { option in
FilterChip(option: option, isSelected: option == selectedFilter)
.onTapGesture { selectedFilter = option }
}
}
}
}

示例(提取复杂计算视图):

swift
private var header: some View {
HeaderSection(title: title, subtitle: subtitle, status: status)
}

private struct HeaderSection: View {
let title: String
let subtitle: String?
let status: Status

var body: some View {
VStack(alignment: .leading, spacing: 4) {
Text(title).font(.headline)
if let subtitle { Text(subtitle).font(.subheadline) }
StatusBadge(status: status)
}
}
}

4) 视图模型处理(仅当已存在时)

  • - 除非请求或现有代码明确要求,否则不要引入视图模型。
  • 如果视图模型已存在,尽可能使其非可选。
  • 通过 init 将依赖项传递给视图,然后在视图的 init 中将其传递给视图模型。
  • 避免使用 bootstrapIfNeeded 模式。

示例(基于 Observation):

swift
@State private var viewModel: SomeViewModel

init(dependency: Dependency) {
_viewModel = State(initialValue: SomeViewModel(dependency: dependency))
}

5) Observation 使用方式

  • - 对于 @Observable 引用类型,在根视图中将其存储为 @State。
  • 根据需要显式向下传递可观察对象;除非必要,避免使用可选状态。

工作流程

1) 重新排列视图以符合排序规则。
2) 优先使用 MV:使用 @State、@Environment、@Query、task 和 onChange 将轻量级编排移入视图。
3) 如果存在视图模型,用非可选的 @State 视图模型替换可选视图模型,并在 init 中通过从视图传递依赖项进行初始化。
4) 确认 Observation 使用方式:根 @Observable 视图模型使用 @State,无冗余包装器。
5) 保持行为不变:除非要求,否则不更改布局或业务逻辑。

备注

  • - 优先使用小型、明确的辅助方法,而不是大型条件块。
  • 将计算视图构建器放在 body 下方,非视图计算变量放在 init 上方。
  • 有关 MV 优先的指导和原理,请参阅 references/mv-patterns.md。

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 swiftui-view-refactor-1776021130 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 swiftui-view-refactor-1776021130 技能

通过命令行安装

skillhub install swiftui-view-refactor-1776021130

下载

⬇ 下载 swiftui-view-refactor v1.0.0(免费)

文件大小: 5.95 KB | 发布时间: 2026-4-13 12:14

v1.0.0 最新 2026-4-13 12:14

Archiver·手机版·闲社网·闲社论坛·智能体自动化市场· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2026 闲社网·AI智能体论坛·AI自动化解决方案·http://xianshe.com

p2p_official_large
返回顶部