Swift 6.4 在 Beta 版本中帶來了多項關鍵更新,其核心目標在於降低開發者的心智負擔,並在維持強大類型安全的前提下,提升開發效率與系統效能。對於習慣於舊版 Swift 或剛接觸該語言的工程師來說,這次更新主要集中在併發控制、平台相容性簡化以及測試體系整合三個面向。
強化併發安全性與語法精簡
Swift 近年來最核心的演進在於對併發安全性(Concurrency Safety)的追求。在 6.4 版本中,引入了 weak let 宣告,這解決了一個長久以來的痛點:當類別中包含弱引用屬性(weak var)時,開發者往往必須使用 @unchecked Sendable 來強行告知編譯器該類別是執行緒安全的,但這會喪失編譯器的靜態檢查保護。現在透過 weak let,開發者可以在不犧牲安全性檢查的情況下,讓類別符合 Sendable 協定(即該類型可以在不同執行緒之間安全傳遞)。
此外,為了更精準地控制類型行為,Swift 6.4 引入了 ~Sendable 標記,允許開發者明確指定某個類型不應符合 Sendable 協定,從而防止該類型被錯誤地用於併發環境中。在語法細節上,defer 關鍵字現在支援 await,這意味著在函數結束前的清理工作中,可以直接執行非同步任務,讓資源釋放邏輯更加自然。
簡化跨平台開發與警告管理
在處理 Apple 生態系的多平台開發時,開發者經常需要撰寫冗長的 @available 宣告來指定 iOS、macOS 或 visionOS 的版本限制。Swift 6.4 引入了 anyAppleOS 識別碼,將原本需要分開列出的多個平台統一簡化,大幅減少重複代碼並降低維護成本。
針對編譯警告的處理,新版本提供了 @diagnose 屬性。這對大型專案尤其重要,工程師可以針對特定的函數,將過時警告(Deprecation Warnings)靜音,或者將某些警告提升為錯誤(Error)以強制團隊修正,讓警告管理從全域設定轉向更精細的函數級別控制。
現代化測試框架的整合與互操作性
Apple 正在推動從舊有的 XCTest 遷移到全新的 Swift Testing 框架。為了讓遷移過程更平滑,Swift 6.4 強化了兩者的互操作性(Interop)。現在 XCTest 的斷言失敗可以被視為 Swift Testing 中的問題(Issue)來報告,且 Swift Testing 的 API 也能在 XCTest 環境中運行。
在測試執行面上,新版本增加了對不穩定測試(Flaky Tests)的處理機制,允許設定重試次數直到通過。同時,透過 Test.cancel API,開發者可以動態取消包含參數化案例的測試,提升測試套件的執行效率。
效能優化與 C 語言互操作性
在底層效能方面,Swift Foundation 繼續將原有的 Objective-C 實作替換為純 Swift 版本。最顯著的提升在於 URL 解析速度最高提升了 4 倍,且 Data 操作與 NSData 的橋接更加高效,降低了記憶體占用。
對於需要與底層 C 語言庫互動的場景,Swift 6.4 引入了 @C 屬性。這讓 Swift 函數能像 @objc 一樣輕鬆地導出給 C 語言調用。編譯器會自動檢查類型相容性,確保傳遞給 C 的整數、指標或結構體符合規範,避免了以往手動處理 C 互操作時容易發生的記憶體崩潰問題。
最後,新版本還引入了 ProgressManager,提供一種類型安全且結構化的進度報告機制,能與 async/await 完美整合,解決了以往處理長耗時任務進度時缺乏統一標準的問題。
來源:infoq.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。