黑河市网站建设_网站建设公司_论坛网站_seo优化
2025/12/21 16:51:26 网站建设 项目流程

一、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 风格的强制检查工具,配置后编译时违规则报错,核心步骤:
  1. 安装 SwiftLint:brew install swiftlint
  2. 在项目根目录创建.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
     
     
  3. 在 Xcode 的Build Phases中添加脚本,编译时自动检查:
    bash
     
    运行
     
     
     
     
    if which swiftlint >/dev/null; thenswiftlint
    elseecho "SwiftLint not installed, download from https://github.com/realm/SwiftLint"
    fi
     
     

总结

  1. 核心格式要求:Swift/OC 均遵循 4 个空格缩进、二元运算符 / 逗号后加空格、大括号不换行、命名符合驼峰规则,这是 Apple 格式规范的基础;
  2. 工具保障:用 Xcode 的Ctrl+I一键格式化,配合 SwiftLint 强制检查,避免手动遗漏;
  3. 关键原则:所有格式规范的最终目的是提升可读性,而非机械遵守 ——Apple 官方也允许在不影响可读性的前提下灵活调整(如超长方法参数的换行)。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询