一、Apple 官方格式规范的核心原则
Apple 对代码格式的要求核心是:可读性优先、风格统一、简洁不冗余,所有规范都围绕这三个原则展开,以下分 Swift 和 Objective-C 两大语言详细说明。
二、Swift 官方格式规范(重点)
Apple 在 Swift.org 和 Xcode 内置的格式化工具中定义了核心规范,以下是必须遵守的关键项:
1. 缩进与空格
- 缩进:使用4 个空格(禁止用 Tab),Xcode 默认已配置(可在
Xcode > Settings > Text Editing > Indentation中确认); - 二元运算符两侧:必须加 1 个空格(
+/-/*/=/==等),示例:swift// 错误(无空格) let sum=a+b*c if a==b{...} // 正确(Apple规范) let sum = a + b * c if a == b { ... } - 逗号后:必须加 1 个空格,示例:
swift
// 错误 let array = [1,2,3] func test(a:Int,b:String){...} // 正确 let array = [1, 2, 3] func test(a: Int, b: String) { ... } - 括号内侧:无空格(
()/[]/{}),示例:swift// 错误(括号内侧有空格) let dict = [ "key": "value" ] if ( a > 0 ) { ... } // 正确 let dict = ["key": "value"] if (a > 0) { ... }
2. 换行与代码块
- 大括号
{:必须和声明在同一行,闭合}单独成行,且对齐声明开头,示例:swift// 错误(Apple明确禁止) func test() {print("hello") } // 正确(Apple规范) func test() {print("hello") } - 控制流语句(if/for/while/switch):条件后必须加空格,
{不换行,示例:swift// 错误 if(a>0){...} for item in array{...} // 正确 if (a > 0) {// 缩进4个空格print("positive") } else if (a < 0) { // else if 和上一个 } 同一行print("negative") } else {print("zero") } - switch 语句:case 缩进 4 个空格,
:后加空格,示例:swift// 正确(Apple规范) switch status { case .pending:print("待处理") case .paid:print("已支付") default:print("未知状态") } - 方法 / 闭包参数:超过 1 个参数时,换行并对齐第一个参数,示例:
swift
// 正确(Apple推荐) func fetchUser(id: String,name: String,completion: @escaping (User?) -> Void ) {// 逻辑 }// 闭包换行对齐 let button = UIButton().then {$0.setTitle("点击", for: .normal)$0.backgroundColor = .blue }
3. 命名格式(严格对齐 Apple)
- 类 / 结构体 / 枚举 / 协议:大驼峰(UpperCamelCase),协议名不加
I前缀(Apple 明确反对 C# 风格的I前缀),示例:swift// 正确(Apple规范) class UserProfileViewController {} struct ProductModel {} enum OrderStatus {} protocol Printable {} // 而非 IPrintable - 方法 / 变量 / 常量:小驼峰(lowerCamelCase),常量全大写 + 下划线(仅全局常量),示例:
swift
// 正确 var userName: String = "" func updateUserAvatar() {} static let MAX_RETRY_COUNT = 3 // 全局常量 - 方法参数:外部名(标签)语义化,内部名简洁,示例:
swift
// 正确(Apple推荐:外部名提升可读性) func addItem(_ item: String, to list: [String]) -> [String] {var newList = listnewList.append(item)return newList } // 调用时:addItem("apple", to: fruits)
4. 注释格式
- 单行注释:
//后加 1 个空格,注释内容和代码隔 1 行(非紧邻),示例:swift// 正确 let currentTime = Date()// 获取用户当前所在时区(注释说明"为什么",而非"做什么") let timeZone = TimeZone.current - 文档注释:用
///(单行)或/** */(多行),遵循 Apple 的 DocC 规范,示例:swift/// 根据用户ID获取用户信息 /// - Parameter userId: 用户唯一标识 /// - Returns: 包含用户信息的模型 /// - Throws: 当网络请求失败时抛出NetworkError func getUserInfo(userId: String) throws -> User {// 逻辑 }
三、Objective-C 官方格式规范
Apple 对 OC 的格式规范集中在 Coding Guidelines for Cocoa,核心要求:
1. 缩进与空格
- 缩进:4 个空格(同 Swift);
- 方法声明:每个参数换行并对齐,
:后加空格,示例:objc// 正确(Apple规范) - (void)fetchUserWithID:(NSString *)userIdname:(NSString *)userNamecompletion:(void (^)(User *user))completion {// 逻辑 } - 条件语句:
if/for后加空格,{不换行,示例:objc// 正确 if (userID != nil) {[self fetchUserWithID:userID name:@"" completion:nil]; }
2. 命名格式
- 类名:前缀 + 大驼峰(如
APPUserViewController,前缀通常为 2-3 个字母); - 方法名:小驼峰 + 语义化,动词开头,示例:
objc
// 正确(Apple推荐:动词+宾语+修饰) - (void)updateUserAvatar:(UIImage *)avatar; - (NSArray *)getProductListWithCategory:(NSString *)category; - 变量名:小驼峰,成员变量加下划线前缀(
_userName),示例:objc// 正确 @interface UserModel : NSObject @property (nonatomic, copy) NSString *userName; // 属性无下划线 @end@implementation UserModel {NSString *_nickName; // 成员变量加下划线 } @end
3. 括号与换行
- 消息发送:
[]内侧无空格,多参数换行对齐,示例:objc// 正确 [self.view addSubview:button]; [self fetchUserWithID:@"123"name:@"张三"completion:^(User *user) {// 闭包缩进4个空格NSLog(@"%@", user.userName);}];
四、强制对齐 Apple 格式的工具配置
手动遵守容易遗漏,推荐通过 Xcode 内置工具 + SwiftLint 强制对齐 Apple 规范:
1. Xcode 内置格式化(一键对齐)
- 选中代码 → 右键 →
Structure > Re-Indent(快捷键Ctrl+I),Xcode 会自动按照 Apple 规范调整缩进、空格、换行; - 配置自动格式化:
Xcode > Settings > Text Editing > Formatting,勾选:Automatically trim trailing whitespace(自动删除行尾空格);Including whitespace-only lines(删除空行的空格);Automatically re-indent code(粘贴代码时自动重新缩进)。
2. SwiftLint 配置(强制遵守 Apple 规范)
SwiftLint 是 Apple 风格的强制检查工具,配置后编译时违规则报错,核心步骤:
- 安装 SwiftLint:
brew install swiftlint; - 在项目根目录创建
.swiftlint.yml,写入 Apple 规范的核心规则:yaml# 对齐Apple官方格式规范的核心规则 disabled_rules:- line_length # 如需限制行长度可开启 opt_in_rules:- empty_count- explicit_init rules:# 缩进:4个空格indentation:width: 4indent_case_contents: true# 禁止Tabno_tabs:severity: error# 二元运算符两侧空格operator_usage_whitespace:severity: error# 逗号后空格comma:severity: error# 大括号格式brace_style:severity: errorallowed_symbols: [{}]mandatory_newline_after_opening_brace: true - 在 Xcode 的
Build Phases中添加脚本,编译时自动检查:bash运行if which swiftlint >/dev/null; thenswiftlint elseecho "SwiftLint not installed, download from https://github.com/realm/SwiftLint" fi
总结
- 核心格式要求:Swift/OC 均遵循 4 个空格缩进、二元运算符 / 逗号后加空格、大括号不换行、命名符合驼峰规则,这是 Apple 格式规范的基础;
- 工具保障:用 Xcode 的
Ctrl+I一键格式化,配合 SwiftLint 强制检查,避免手动遗漏; - 关键原则:所有格式规范的最终目的是提升可读性,而非机械遵守 ——Apple 官方也允许在不影响可读性的前提下灵活调整(如超长方法参数的换行)。