我想做一個很好的方式來處理錯誤使用UIAlertController與重試導致錯誤的代碼選項。我想出了,不知怎的,實際工作這個巨大的混亂:Swift:錯誤處理與拋出逃脫封閉(令人困惑)
func handleError(_ closure: @escaping() throws -> Void) {
do {
try closure()
} catch {
print(error)
let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .alert)
let retry = UIAlertAction(title: "Retry", style: .default, handler: {(_: UIAlertAction) in self.handleError(closure)})
alert.addAction(retry)
let cancel = UIAlertAction(title: "Cancel", style: .cancel)
alert.addAction(cancel)
present(alert, animated: true)
}
}
然而,只看這個,好像它會造成比阻止他們更多的錯誤。有什麼我可以做的,使這個簡單或更少混淆?我無法理解爲什麼我需要@escaping部分(但編譯器告訴我我),或者爲什麼我需要爲UIAlertAction關閉提供一個空白參數。
我只需要一些保證,這不是一個解決方案太糟糕。
閉包可以是需要在其前面「嘗試」工作的任何代碼。我想在各種地方使用它 – MysteryPancake
與嘗試和關閉沒有任何關係。在調用任何可能拋出異常的函數之前,您必須使用try。如果一個操作可以拋出一個異常(認爲是一個受控的錯誤),你必須使用try。閉包是一種特殊類型的函數,您可以將其作爲參數傳遞給其他函數。 –
我可以簡化這段代碼的任何部分嗎?我主要考慮(_:UIAlertAction)部分 – MysteryPancake