2015-12-08 15 views
16

tryが必要な2つのステートメントを実行する必要があるコードブロックがあります。それは巣に優れている試みの、それぞれが自分のDO {}キャッチ{}すぐに複数のtryを連続して処理する方法

do { 
    try thingOne() 
    do { 
     try thingTwo() 
    } catch let error as NSError { 
      //handle this specific error 
    } 
} catch let error as NSError { 
     //handle the other specific error here 
} 

を持っている...またはいずれかの操作を行いブロックで試してみるのをラップし、連続してそれらを実行しますか?

do { 

    try thingOne() 
    try thingTwo() 
} catch let error as NSError { 
    //do something with this error 
} 

そのcatch仕事はエラーをスローし、それらのいずれかの場合はなりますが2つ目のシナリオは、最初よりも読みやすいようですか?

私は、エラーが十分に一般的なものでない限り、それは問題ではないかもしれません、スローさ異なるエラーを区別する必要があるだろう。 Appleのドキュメントを見て、これに関する何も見ていない。

答えて

14

私は2番目の方法は、私はその後、私はこれが

Thing 1 
Error1 
を記録します。この

do { 
     try thingOne() 
     try thingTwo() 
    } catch CustomError.Type1 { 
     print("Error1") 
    } catch CustomError.Type2{ 
     print("Error2") 
    } catch { 
     print("Not known\(error) ") 
    } 

のようにそれを呼び出します。これらの二つの機能

func thingOne() throws{ 
     print("Thing 1") 
     throw CustomError.Type1 
} 
func thingTwo() throws{ 
    print("Thing 2") 

    throw CustomError.Type2 

} 
enum CustomError:ErrorType{ 
    case Type1 
    case Type2 
} 

があるとし

優れていると思います

I f thingOne()はエラーをスローしません。ログに記録されます

Thing 1 
Thing 2 
Error2 
+0

私はそのようにも感謝しています – bolnad

関連する問題