当前位置: 首页 > news >正文

格式:遵循Apple官方格式规范

一、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 官方也允许在不影响可读性的前提下灵活调整(如超长方法参数的换行)。
http://www.gsyq.cn/news/131775.html

相关文章:

  • Thinkphp和Laravel+vue好未来团购网系统vue
  • 第 481 场周赛Q1——100942. 整数的镜像距离
  • 2025隐形车衣哪家强?这5家口碑门店不容错过!贴车衣/贴隐形车衣/汽车车衣/贴太阳膜/汽车贴膜/车衣改色门店推荐榜单 - 品牌推荐师
  • 【独家深度】:从架构到生态,Open-AutoGLM如何实现对UFT Mobile的弯道超车
  • 【独家深度】:从架构到生态,Open-AutoGLM如何实现对UFT Mobile的弯道超车
  • Thinkphp和Laravel宠屋”宠物交易商城购物网站的设计与实现-vue
  • 基于Java的园林智能智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 【独家测评】Open-AutoGLM vs Tricentis Tosca:跨系统适配能力谁更强?6个月实测数据曝光
  • 为什么顶尖企业开始从Applitools转向Open-AutoGLM?(深度解析)
  • 3D
  • 下载 | Win7系统最新版ISO映像(集成12月最新补丁、旗舰版、完整纯净无精简、64位/32位可选、Windows 7)
  • 你还在为自动化测试平台纠结?:Open-AutoGLM与LambdaTest7大功能差异全揭露
  • Open-AutoGLM与SoapUI功能协同差异全解析(90%工程师忽略的关键细节)
  • 巧手智心STEM和网上的科学盒子有什么区别
  • 接口测试新纪元:Open-AutoGLM与Postman联动差异深度剖析(内含性能实测数据)
  • 别再盲目迁移了!,Open-AutoGLM与LambdaTest迁移成本与风险全面预警
  • Then库的原理是什么?
  • 为什么顶尖企业都在弃用Perfecto转向Open-AutoGLM?真相在这里
  • 基于Java的园区企业智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • linux各版本历史版本下载
  • 毕业季必看!8款AI写论文神器,知网查重一把过且不留AIGC痕迹!
  • 【Open-AutoGLM与Tricentis Tosca深度对比】:揭秘两大自动化测试引擎的适配差异与选型关键
  • Open-AutoGLM vs JMeter:性能测试如何选择?3大维度全面解析
  • Open-AutoGLM与Cypress如何抉择?揭秘大厂在移动端自动化中的真实技术选型逻辑
  • 为什么你的自动化测试总失败?(Open-AutoGLM与SOAtest集成痛点全解析)
  • 移动测试平台怎么选?Open-AutoGLM与Perfecto的7项硬核对比告诉你答案
  • 基于Java的园区物业智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 【开题答辩全过程】以 基于Vuejs汽车租赁系统的设计与实现为例,包含答辩的问题和答案
  • 【Open-AutoGLM vs UFT Mobile深度对比】:揭秘两大自动化测试平台的核心差异与选型策略
  • 【Open-AutoGLM与JMeter性能测试终极对比】:揭秘两者协同优化的5大核心场景