Awesome-openclaw-skills swiftui-ui-patterns
Best practices and example-driven guidance for building SwiftUI views and components. Use when creating or refactoring SwiftUI UI, designing tab architecture with TabView, composing screens, or needing component-specific patterns and examples.
install
source · Clone the upstream repo
git clone https://github.com/sundial-org/awesome-openclaw-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/swiftui-ui-patterns" ~/.claude/skills/sundial-org-awesome-openclaw-skills-swiftui-ui-patterns && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/swiftui-ui-patterns" ~/.openclaw/skills/sundial-org-awesome-openclaw-skills-swiftui-ui-patterns && rm -rf "$T"
manifest:
skills/swiftui-ui-patterns/SKILL.mdsource content
SwiftUI UI Patterns
Quick start
Choose a track based on your goal:
Existing project
- Identify the feature or screen and the primary interaction model (list, detail, editor, settings, tabbed).
- Find a nearby example in the repo with
or similar, then read the closest SwiftUI view.rg "TabView\(" - Apply local conventions: prefer SwiftUI-native state, keep state local when possible, and use environment injection for shared dependencies.
- Choose the relevant component reference from
and follow its guidance.references/components-index.md - Build the view with small, focused subviews and SwiftUI-native data flow.
New project scaffolding
- Start with
to wire TabView + NavigationStack + sheets.references/app-scaffolding-wiring.md - Add a minimal
andAppTab
based on the provided skeletons.RouterPath - Choose the next component reference based on the UI you need first (TabView, NavigationStack, Sheets).
- Expand the route and sheet enums as new screens are added.
General rules to follow
- Use modern SwiftUI state (
,@State
,@Binding
,@Observable
) and avoid unnecessary view models.@Environment - Prefer composition; keep views small and focused.
- Use async/await with
and explicit loading/error states..task - Maintain existing legacy patterns only when editing legacy files.
- Follow the project's formatter and style guide.
- Sheets: Prefer
over.sheet(item:)
when state represents a selected model. Avoid.sheet(isPresented:)
inside a sheet body. Sheets should own their actions and callif let
internally instead of forwardingdismiss()
/onCancel
closures.onConfirm
Workflow for a new SwiftUI view
- Define the view's state and its ownership location.
- Identify dependencies to inject via
.@Environment - Sketch the view hierarchy and extract repeated parts into subviews.
- Implement async loading with
and explicit state enum if needed..task - Add accessibility labels or identifiers when the UI is interactive.
- Validate with a build and update usage callsites if needed.
Component references
Use
references/components-index.md as the entry point. Each component reference should include:
- Intent and best-fit scenarios.
- Minimal usage pattern with local conventions.
- Pitfalls and performance notes.
- Paths to existing examples in the current repo.
Sheet patterns
Item-driven sheet (preferred)
@State private var selectedItem: Item? .sheet(item: $selectedItem) { item in EditItemSheet(item: item) }
Sheet owns its actions
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() } }
Adding a new component reference
- Create
.references/<component>.md - Keep it short and actionable; link to concrete files in the current repo.
- Update
with the new entry.references/components-index.md