我一直想这样做:
do { let result = try getAThing() } catch { //error } do { let anotherResult = try getAnotherThing(result) //Error - result out of scope } catch { //error }
但似乎只能做到这一点:
do { let result = try getAThing() do { let anotherResult = try getAnotherThing(result) } catch { //error } } catch { //error }
有没有办法result
在不必嵌套do/catch块的情况下保持不可变的范围?有没有办法防止错误类似于我们如何使用guard
语句作为if/else块的反转?
在Swift 1.2中,您可以将常量的声明与常量的赋值分开.(请参阅Swift 1.2博客条目中的"常量现在更强大和一致" .)因此,将其与Swift 2错误处理相结合,您可以:
let result: ThingType do { result = try getAThing() } catch { // error handling, e.g. return or throw } do { let anotherResult = try getAnotherThing(result) } catch { // different error handling }
另外,有时候我们并不真正需要两个不同的do
- catch
语句和一个catch
将处理在一块了潜在的引发的错误:
do { let result = try getAThing() let anotherResult = try getAnotherThing(result) } catch { // common error handling here }
这取决于您需要什么类型的处理.