swift
Write safe Swift code avoiding memory leaks, optional traps, and concurrency bugs.
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Quick Reference
| Topic | File |
|---|---|
| Optionals, nil safety, force unwrap | optionals.md |
| Retain cycles, weak refs, closures | memory.md |
| async/await, actors, Sendable, value types | concurrency.md |
| JSON encoding/decoding traps | codable.md |
| Protocols, collections, strings, errors, build | types.md |
| SwiftUI state (@State, @Binding, Combine) | swiftui.md |
| Property wrappers, actors, result builders, macros | advanced.md |
| XCTest pitfalls, SPM gotchas | testing.md |
Critical Rules
Memory & Safety
- Force unwrap
!crashes on nil — useguard letorif letinstead - Closures capturing
selfstrongly create retain cycles — use[weak self]in escaping closures - Delegates must be
weak— strong delegate = object never deallocates -
try!crashes on any error — never use in production paths -
removeFirst()crashes on empty — usepopFirst()for safety
Concurrency
-
async letstarts immediately — not when youawait - Actor reentrancy at every
await— state may change between suspension points -
@MainActordoesn't guarantee immediate main thread — it's queued -
Sendableconformance violations crash at runtime — compiler warnings are errors
Types & Collections
- Protocol extensions don't override — static dispatch ignores subclass implementation
- Mutating struct in collection requires reassignment —
array[0].mutate()doesn't work -
String.Indexfrom one string invalid on another — even if contents match
SwiftUI
-
@StateObjectowns,@ObservedObjectborrows — recreating view loses ObservedObject state -
@EnvironmentObjectcrashes if not injected — no compile-time check - View identity change resets all
@State— changing ID loses state
Build
-
print()builds strings even in release — remove or use os_log - Generic code bloat — specialized for each type, increases binary size
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-03-11
- Index updated
- 2026-03-11
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!