C++ 無 `finally` 關鍵字,依賴 RAII(析構函數)保證資源釋放。Ruby 有 `ensure` 塊。Java 有 `finally` 塊。Swift 引入 `defer` 語句,提供統一、靈活的延遲執行機制。
defer {
// 清理代碼
}
var isTrue = false
func test(name: String) -> Bool {
isTrue = true
defer { isTrue = false }
print("now isTrue is \(isTrue)") // 輸出 true
return name == "hopy"
}
test("hopy")
print(isTrue) // 輸出 false
執行流程:
| 語言 | 機制 | 特點 |
|---|---|---|
| C++ | RAII / 智能指針 | 編譯期確定,零開銷,需定義類 |
| Java | try-catch-finally | 運行時塊結構,異常安全 |
| Ruby | begin-ensure-end | 關鍵字塊,動態 |
| Swift | defer | 語句級、作用域綁定、LIFO、通用清理 |
`defer` 是 Swift 資源管理的基石,語法輕量、語義清晰、適用面廣(不限錯誤處理),體現現代語言對「正確性默認」的設計哲學。掌握 `defer` 可編寫更健壯、可維護的 Swift 代碼。