2015-12-08 77 views
0
do { 
    try thingOne() 
    try thingTwo() 
    try manager.removeItemAtPath("myPath") //NSFileManager instance 
} catch ThingOneErrorType.SomeError { 
    //code here 
} catch { 
    //Need to respond explicitly to manager.removeItemAtPath but how? 
} 

我使用一个包含多个try语句一个do块中的NSFileManager removeItemAtPath实例方法,我想明确地捕捉错误来自fileManager。我的问题是,如果我查看docs for NSFileManager,我无法确定哪些ErrorTypes removeItemAtPath可能会丢失。如何抓具体try语句的DO块多try语句雨燕2.0

我意识到我可以通过嵌套块来解决这个问题,但那会很快成为嵌套混乱。

那么,我该如何确定在具有多个try语句的do块中的特定try语句中抛出什么错误?

回答

1
do { 
    try thingOne() 
    try thingTwo() 
    try manager.removeItemAtPath("myPath") //NSFileManager instance 
} catch ThingOneErrorType.SomeError { 
    //code here 
} catch let error as NSError { 
    //Need to respond explicitly to manager.removeItemAtPath but how? 
    print("Error: \(error.domain)") 
} 

可能

} catch NSCocoaError.FileNoSuchFileError { 
    print("Error: no such file exists") 
} 

会在你的情况作品...(我没有检查!)。 error.domain将帮助您识别它

您可以识别哪个语句通过使用'extra'语句抛出错误,或者在抛出函数成功返回的帮助下更好。我们可以对这种方法说些什么?你最好重新设计你的代码。错误处理应该用作错误处理,而不是作为程序流程的一部分。

import Foundation 
struct E: ErrorType{} 
func foo() throws -> Void { 
    let r = random() % 3 
    if r == 0 { 
     throw E() 
    } 
} 
var fail = 0 
do { 
    try foo() 
    fail++ 
    try foo() 
    fail++ 
    try foo() 
    fail++ 
} catch let e as E { 
    print("failed in :",fail, "attempt") 
} 

//失败:14:尝试

+0

如果我有多个try语句每一个可能引发同一类型的错误或有具有大量可能出现的错误,可能被抛出方法?然后我需要嵌套我的陈述? – nwales

+0

如果您的多个语句可能抛出相同的错误,您是否确实需要在您的代码中执行另一个操作?嗯...在这种情况下,你必须使用分离的do/try/catch块... – user3441734