swift-style
npx skills add https://github.com/johnrogers/claude-swift-engineering --skill swift-style
Agent 安装分布
Skill 文档
Swift Style Guide
Code style conventions for clean, readable Swift code.
Core Principles
Clarity > Brevity > Consistency
Code should compile without warnings.
Naming
UpperCamelCaseâ Types, protocolslowerCamelCaseâ Everything else- Clarity at call site
- No abbreviations except universal (URL, ID)
// Preferred
let maximumWidgetCount = 100
func fetchUser(byID id: String) -> User
Golden Path
Left-hand margin is the happy path. Don’t nest if statements.
// 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:
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.
// Preferred
func configure() {
backgroundColor = .systemBackground
}
Computed Properties
Omit get for read-only:
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:
var names: [String] = []
Syntactic Sugar
// Preferred
var items: [String]
var cache: [String: Int]
var name: String?
Access Control
privateoverfileprivate- Don’t add
internal(it’s the default) - Access control as leading specifier
Memory Management
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:
enum Math {
static let pi = 3.14159
}
Common Mistakes
-
Abbreviations beyond URL, ID, UUID â Abbreviations like
cfg,mgr,ctx,deschurt readability. Spell them out:configuration,manager,context,description. The three exceptions are URL, ID, UUID. -
Nested guard/if statements â Deep nesting makes code hard to follow. Use early returns and guards to keep the happy path left-aligned.
-
Inconsistent self usage â Either always omit
self(preferred) or always use it. Mixing makes code scanning harder and confuses capture semantics. -
Overly generic type names â
Manager,Handler,Helper,Coordinatorare too vague. Names should explain responsibility:PaymentProcessor,EventDispatcher,ImageCache,NavigationCoordinator. -
Implied access control â Don’t skip access control. Explicit
private,publichelps future maintainers understand module boundaries.internalis default, so omit it.