エラーの原因となったコードを再試行するオプション付きで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クロージャの空白の引数を指定する必要があるのですか?
これは解決策があまりにも悪くないという安心感が必要です。
クロージャは、その前に「try」が必要なコードであればどのようなコードでも構いません。私はすべての種類のもののためにその場所全体にそれを使用したい – MysteryPancake
試着との関係はありません。例外をスローする可能性のある関数を呼び出す前にtryを使用する必要があります。操作が例外をスローできる場合(制御されたエラーと考える)、tryを使用する必要があります。クロージャは、他の関数への引数として渡すことのできる特別なタイプの関数です。 –
このコードのうち、私が単純化できる部分はありますか?私は主に(_:UIAlertAction)の部分について考えています – MysteryPancake