function
好問題!讓我解釋為什麼需要加上 try!:
原因說明
-
square函數會拋出錯誤:static func square(_ num: Int) throws -> UInt64注意函數簽名中的
throws關鍵字,這表示這個函數可能會拋出錯誤。 -
Swift 的錯誤處理機制: 在 Swift 中,當你呼叫一個可能拋出錯誤的函數(標記為
throws)時,你必須明確處理這個錯誤。有幾種方式:try- 需要處理錯誤try?- 如果出錯返回 niltry!- 強制執行,如果出錯會崩潰
-
為什麼使用
try!: 在total函數中,我們知道迴圈for i in 1...64中的每個i值都是有效的(1 到 64),因為:- 我們的
square函數只會在num < 1或num > 64時拋出錯誤 - 迴圈中的
i值範圍是 1 到 64,完全在有效範圍內 - 因此
square(i)永遠不會拋出錯誤
- 我們的
-
try!的含義:try!告訴編譯器:「我確定這個函數不會拋出錯誤,如果它真的拋出了錯誤,就讓程式崩潰」- 這是一種「強制解包」的概念,類似於
!用於可選值
其他選擇
如果你不想使用 try!,也可以這樣寫:
static var total: UInt64 {
var result: UInt64 = 0
for i in 1...64 {
do {
result += try square(i)
} catch {
// 這裡永遠不會執行,因為 i 在 1...64 範圍內
fatalError("Unexpected error: \(error)")
}
}
return result
}
但使用 try! 更簡潔,因為我們確定不會有錯誤。