mcpField
S
swift-style

swift-style

github.com/johnrogers开发2331.5k 次安装40 周前更新
代码仓库

关于 swift-style

swift-style 是面向 Swift 开发者的代码风格技能,旨在统一代码习惯并提升可读性。内容涵盖命名、控制流、代码组织、访问控制和内存管理。

主要功能

  1. 01命名与调用点清晰度
  2. 02使用 guard 保持控制流简洁
  3. 03通过扩展和 MARK 组织代码
  4. 04空格与闭包约定
  5. 05访问控制与内存管理建议

适用场景

  1. 01检查 Swift 代码风格一致性
  2. 02在新代码库中采用命名约定
  3. 03组织类型和协议实现

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/johnrogers/claude-swift-engineering --skill swift-style

安装后在 Claude Code 中输入/swift-style确认已加载。

详细介绍

Swift 风格指南

编写简洁、易读 Swift 代码的风格约定。

核心原则

清晰度 > 简洁度 > 一致性

代码应在没有警告的情况下编译。

命名

  • UpperCamelCase — 类型、协议
  • lowerCamelCase — 其他所有内容
  • 确保调用处清晰易懂
  • 除通用缩写(URL、ID)外,不使用缩写
// Preferred
let maximumWidgetCount = 100
func fetchUser(byID id: String) -> User

黄金路径

左侧边缘是理想路径。不要嵌套 if 语句。

// 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)
}

代码组织

使用扩展和 MARK 注释:

class MyViewController: UIViewController {
    // Core implementation
}

// MARK: - UITableViewDataSource
extension MyViewController: UITableViewDataSource { }

空格

  • 左花括号与语句位于同一行,右花括号另起一行
  • 方法之间空一行
  • 冒号前不加空格,后加一个空格

Self

除非编译器要求,否则避免使用 self。

// Preferred
func configure() {
    backgroundColor = .systemBackground
}

计算属性

只读属性省略 get:

var diameter: Double {
    radius * 2
}

闭包

仅当参数只有一个闭包时,才使用尾随闭包。

类型推断

类型明确时让编译器推断。空集合应使用类型注解:

var names: [String] = []

语法糖

// Preferred
var items: [String]
var cache: [String: Int]
var name: String?

访问控制

  • 优先使用 private,而不是 fileprivate
  • 不要添加 internal(它是默认值)
  • 将访问控制放在修饰符列表开头

内存管理

resource.request().onComplete { [weak self] response in
    guard let self else { return }
    self.updateModel(response)
}

注释

  • 解释原因,而非内容本身
  • 使用 // 或 ///,避免使用 /* */
  • 保持注释更新,否则删除

常量

使用无关联值枚举进行命名空间管理:

enum Math {
    static let pi = 3.14159
}

常见错误

  1. 使用 URL、ID、UUID 以外的缩写 — cfg、mgr、ctx、desc 等缩写会降低可读性。请拼写完整:configuration、manager、context、description。仅允许使用 URL、ID、UUID 这三种缩写。

  2. 嵌套 guard/if 语句 — 深层嵌套会让代码难以理解。使用提前返回和 guard,让理想路径保持在左侧。

  3. 不一致地使用 self — 要么始终省略 self(推荐),要么始终使用。混用会增加代码阅读难度,并使捕获语义变得模糊。

  4. 过于笼统的类型名称 — Manager、Handler、Helper、Coordinator 都太含糊。名称应说明职责:PaymentProcessor、EventDispatcher、ImageCache、NavigationCoordinator。

  5. 隐式访问控制 — 不要省略访问控制。明确声明 private、public 有助于后续维护者理解模块边界。internal 是默认值,因此应省略。

评论

支持 Markdown