我有一个如下的try块。当一次尝试失败时,它会捕获块,但我也希望它也运行第二和第三次尝试块。一种解决方案是将所有尝试放在不同的try catch块中,但我想知道是否有更好的解决方案?
do{
try AppURLCache.instance.fetchList()
try ParamCache.instance.fetchList()
try AnalyticsManager.instance.initGoogleAnalyticsManager()
} catch let error as ServiceError {
print(error.message)
} catch let error{
print(error.localizedDescription)
}
可能的解决方案:
do{
try AppURLCache.instance.fetchList()
} catch let error as ServiceError {
print(error.message)
} catch let error{
print(error.localizedDescription)
}
do{
try ParamCache.instance.fetchList()
} catch let error as ServiceError {
print(error.message)
} catch let error{
print(error.localizedDescription)
}
do{
try AnalyticsManager.instance.initGoogleAnalyticsManager()
} catch let error as ServiceError {
print(error.message)
} catch let error{
print(error.localizedDescription)
}
答案 0 :(得分:1)
您可以使用try?
代替try
:
尝试?
如果我们使用try?
关键字并引发错误,则通过将其变为可选值来处理该错误。这意味着不需要将throwing方法调用包装在do-catch
语句中,这样就不会捕获错误。
try? AppURLCache.instance.fetchList()
try? ParamCache.instance.fetchList()
try? AnalyticsManager.instance.initGoogleAnalyticsManager()
答案 1 :(得分:1)
一旦您获得异常,它将捕获到块,您无法更改它。如果您使用try ?,则可以执行此操作,但是将无法捕获将破坏目标的异常。