
Swift Style
Apply consistent Swift naming, layout, and idiomatic patterns whenever you or your agent writes iOS or Apple-platform code.
Install
npx skills add https://github.com/johnrogers/claude-swift-engineering --skill swift-styleWhat is this skill?
- Core principle ordering: clarity over brevity over consistency; zero warnings
- Naming rules for types, protocols, and lowerCamelCase members with no opaque abbreviations
- Golden-path guard style to keep the happy path left-aligned and avoid nested conditionals
- MARK extensions pattern for protocol conformance and file organization
- Spacing, brace, colon, and minimal self-usage conventions with computed property get omission
Adoption & trust: 1.5k installs on skills.sh; 211 GitHub stars; 3/3 security scanners passed (skills.sh audits).
Recommended Skills
Journey fit
Swift style is applied during active product construction, when readability and compile-clean conventions matter for every feature change. Frontend subphase covers client-side UI code on Apple platforms where Swift style directly affects UIViewController organization, extensions, and call-site clarity.
Common Questions / FAQ
Is Swift Style safe to install?
skills.sh reports 3 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Swift Style
# Swift Style Guide Code style conventions for clean, readable Swift code. ## Core Principles **Clarity > Brevity > Consistency** Code should compile without warnings. ## Naming - `UpperCamelCase` — Types, protocols - `lowerCamelCase` — Everything else - Clarity at call site - No abbreviations except universal (URL, ID) ```swift // Preferred let maximumWidgetCount = 100 func fetchUser(byID id: String) -> User ``` ## Golden Path Left-hand margin is the happy path. Don't nest `if` statements. ```swift // Preferred func process(value: Int?) throws -> Result { guard let value = value else { throw ProcessError.nilValue } guard value > 0 else { throw ProcessError.invalidValue } return compute(value) } ``` ## Code Organization Use extensions and MARK comments: ```swift class MyViewController: UIViewController { // Core implementation } // MARK: - UITableViewDataSource extension MyViewController: UITableViewDataSource { } ``` ## Spacing - Braces open on same line, close on new line - One blank line between methods - Colon: no space before, one space after ## Self Avoid `self` unless required by compiler. ```swift // Preferred func configure() { backgroundColor = .systemBackground } ``` ## Computed Properties Omit `get` for read-only: ```swift var diameter: Double { radius * 2 } ``` ## Closures Trailing closure only for single closure parameter. ## Type Inference Let compiler infer when clear. For empty collections, use type annotation: ```swift var names: [String] = [] ``` ## Syntactic Sugar ```swift // Preferred var items: [String] var cache: [String: Int] var name: String? ``` ## Access Control - `private` over `fileprivate` - Don't add `internal` (it's the default) - Access control as leading specifier ## Memory Management ```swift resource.request().onComplete { [weak self] response in guard let self else { return } self.updateModel(response) } ``` ## Comments - Explain **why**, not what - Use `//` or `///`, avoid `/* */` - Keep up-to-date or delete ## Constants Use case-less enum for namespacing: ```swift enum Math { static let pi = 3.14159 } ``` ## Common Mistakes 1. **Abbreviations beyond URL, ID, UUID** — Abbreviations like `cfg`, `mgr`, `ctx`, `desc` hurt readability. Spell them out: `configuration`, `manager`, `context`, `description`. The three exceptions are URL, ID, UUID. 2. **Nested guard/if statements** — Deep nesting makes code hard to follow. Use early returns and guards to keep the happy path left-aligned. 3. **Inconsistent self usage** — Either always omit `self` (preferred) or always use it. Mixing makes code scanning harder and confuses capture semantics. 4. **Overly generic type names** — `Manager`, `Handler`, `Helper`, `Coordinator` are too vague. Names should explain responsibility: `PaymentProcessor`, `EventDispatcher`, `ImageCache`, `NavigationCoordinator`. 5. **Implied access control** — Don't skip access control. Explicit `private`, `public` helps future maintainers understand module boundaries. `internal` is default, so omit it.