我对错误处理不太熟悉,所以任何建议都会非常感激。
我的代码以递归方式向Apple API发出多个调用来计算路径,因为它需要计算多个选项的距离。
do {
directions.calculate(completionHandler: {(response, error) in
let response = (response?.routes)! //This line bugs out
for route in response {
//code
completion(result, error)
}
})
}
catch {
print(error.localizedDescription)
}
它会在第5或第6次崩溃,我想知道是否有办法阻止应用程序崩溃并通知。
由于
答案 0 :(得分:1)
使用do-catch
块没有意义,因为您的代码中没有throwable
功能,因此您无法捕获任何错误。在Swift中,您只能捕获标记为throws
的函数抛出的错误,所有其他错误都是不可恢复的。
您应该安全地展开可选的response
,因为它可能是nil
,在这种情况下,强制解包会导致您遇到的不可恢复的运行时错误。
您可以使用guard
语句和可选绑定来安全地展开可选的response
,并在没有response
的情况下提前退出。
directions.calculate(completionHandler: {(response, error) in
guard let response = response, error == nil else {
completion(nil,error)
return
}
for route in response.routes {
....
completion(result, nil)
}
})