iOS Swift + UIKit 編程規範指南

本指南聚焦 Swift 語言特性與 UIKit 框架設計理念,結合蘋果官方推薦與工業界最佳實踐,覆蓋命名規範、代碼結構、UI 開發、性能優化等核心維度,旨在提升代碼可讀性、可維護性與擴展性。

一、命名規範

  1. 標識符命名
  • 類 / 結構體 / 枚舉:採用大駝峯式(UpperCamelCase),前綴體現模塊 / 功能,如UserProfileViewControllerOrderStatusEnum
  • 方法 / 變量 / 常量:小駝峯式(lowerCamelCase),動詞開頭描述行為(方法),名詞體現含義(變量),如fetchUserData()userNameLabelmaxRetryCount
  • 常量:全大寫 + 下劃線分隔,僅用於全局常量,如let API_BASE_URL = "https://api.example.com"(局部常量仍用小駝峯)。
  • IBOutlets:以控件類型結尾,避免_或冗餘前綴,如submitButton(而非btnSubmit/submitBtn)、emailTextField
  1. 協議命名
  • 功能型協議以-able/-ible結尾,如ReusableViewDataLoadable;委託協議後綴為Delegate/DataSource,如TableViewDelegate
  1. 枚舉成員
  • 枚舉名採用大駝峯,成員用小駝峯(或全小寫 + 下劃線,根據語義),如:swift
enum NetworkError: Error {
    case requestTimeout
    case invalidResponse
}

二、代碼結構與組織

  1. 文件組織
  • 單個類 / 結構體對應一個文件,文件名與類名一致(如UserViewModel.swift);
  • 按模塊 / 功能劃分文件夾,如Controllers/Models/Views/Utils/Networking
  • 擴展(Extension)按功能拆分,每個擴展聚焦單一職責(如佈局、代理方法、自定義方法),示例:swift
// UserViewController.swift
class UserViewController: UIViewController {
    // 核心屬性與初始化
}

// MARK: - UI Setup
extension UserViewController {
    private func setupUI() { ... }
}

// MARK: - UITableViewDelegate
extension UserViewController: UITableViewDelegate { ... }
  1. 類設計原則
  • 遵循單一職責原則:一個類僅負責一個功能模塊(如NetworkManager僅處理網絡請求,不包含 UI 邏輯);
  • 優先使用組合優於繼承:通過協議擴展、組件化拆分替代複雜繼承鏈;
  • 控制器瘦身:將數據處理、業務邏輯剝離至ViewModel/Manager,控制器僅負責 UI 渲染與事件轉發。

三、UIKit 開發規範

  1. UI 佈局
  • 代碼佈局優先:推薦使用SnapKit/NSLayoutConstraint純代碼佈局,避免 Storyboard/XIB(複雜頁面可拆分 XIB,但禁止大規模 Storyboard 耦合);
  • Auto Layout 規範
  • 約束命名體現作用,如titleLabelCenterYConstraint
  • 使用activate批量激活約束,避免逐個isActive = true:swift
NSLayoutConstraint.activate([
    titleLabel.centerYAnchor.constraint(equalTo: view.centerYAnchor),
    titleLabel.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20)
])
  • 佈局分離:將佈局代碼封裝在setupConstraints()私有方法中,統一調用。
  1. 控件使用
  • 複用機制:UITableView/UICollectionView 必須註冊複用標識符,且標識符與 Cell 類名一致:swift
tableView.register(UserCell.self, forCellReuseIdentifier: String(describing: UserCell.self))
  • 懶加載控件:避免viewDidLoad中一次性初始化所有控件,使用lazy var延遲加載:swift
private lazy var userNameLabel: UILabel = {
    let label = UILabel()
    label.font = .systemFont(ofSize: 16, weight: .medium)
    label.textColor = .darkText
    return label
}()
  1. 事件處理
  • 按鈕點擊等事件通過addTarget綁定,方法名以on開頭,如onSubmitButtonTapped(_:)
  • 避免在事件方法中直接寫業務邏輯,轉發至ViewModel處理:swift
@objc private func onSubmitButtonTapped(_ sender: UIButton) {
    viewModel.submitForm(userName: userNameTextField.text ?? "")
}

四、Swift 語言特性規範

  1. 可選類型處理
  • 強制解包(!)僅用於 100% 非空場景(如 IBOutlets 已關聯),否則使用可選綁定(if let/guard let)或空合運算符(??):swift
guard let userName = userNameTextField.text, !userName.isEmpty else {
    showError(message: "用户名不能為空")
    return
}
  • 類型轉換優先用as?+ 可選綁定,避免as!崩潰。
  1. 集合與循環
  • 遍歷集合優先用for-in,避免 C 風格循環;
  • 使用高階函數(map/filter/reduce)簡化邏輯,如:swift
let activeUsers = users.filter { $0.isActive }.map { $0.name }
  1. 錯誤處理
  • 網絡請求、數據解析等場景使用do-catch捕獲錯誤,自定義錯誤枚舉遵循Error協議;
  • 禁止用try!忽略錯誤(除非明確無需處理)。

五、性能與內存管理

  1. 內存管理
  • 委託 / 閉包避免循環引用:委託用weak,閉包捕獲列表標註[weak self]/[unowned self]

    swift

networkManager.fetchData { [weak self] result in
    guard let self = self else { return }
    self.handleResult(result)
}
  • 圖片加載使用UIImage(named:)(緩存)或UIImage(contentsOfFile:)(非緩存),避免內存泄漏。
  1. 渲染優化
  • 避免在draw(_:)中繪製複雜圖形,優先用CALayer
  • 列表滑動優化:Cell 高度緩存、異步加載圖片、避免cellForRowAt中計算佈局。

六、註釋規範

  1. 文檔註釋:類 / 方法使用////** */添加説明,包含參數、返回值、異常(Xcode 可自動生成文檔):




    swift









/// 根據用户ID獲取用户信息
/// - Parameters:
///   - userId: 用户唯一標識
///   - completion: 回調返回用户模型或錯誤
func fetchUser(userId: String, completion: @escaping (Result<User, Error>) -> Void)
  1. 代碼註釋:僅對複雜邏輯、特殊處理添加註釋,避免冗餘(如// 創建按鈕無意義)。

七、工程配置規範

  1. 依賴管理:優先使用 Swift Package Manager(SPM),其次 CocoaPods,避免手動導入框架;
  2. 資源管理:圖片 / 顏色 / 字符串統一管理,如Assets.xcassets分類存儲圖片,Constants.swift定義全局常量;
  3. 版本控制:提交信息遵循[模塊] 操作:描述(如[User] Fix: 修復用户名驗證邏輯),避免大文件提交。

八、安全與兼容性

  1. 數據校驗:用户輸入、網絡返回數據必須校驗合法性,避免空值 / 越界;
  2. 系統版本適配:使用if #available(iOS 15.0, *)判斷 API 兼容性,避免崩潰;
  3. 隱私合規:敏感權限(如相機、定位)需在Info.plist添加描述,如NSCameraUsageDescription

遵循以上規範可顯著降低團隊協作成本,同時讓代碼更貼合蘋果生態設計哲學,減少潛在 Bug 與性能問題。建議結合項目實際制定補充細則,並通過 Lint 工具(如 SwiftLint)自動化檢查規範執行情況。