Как обрабатывать последовательные множественные попытки в swift 2.0

У меня есть блок кода, который должен выполнить 2 оператора, которые требуют попробовать. Лучше ли вставить попытку, и каждый из них имеет свои собственные. {} Catch {}

 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, если кто-либо из них выдает ошибку?

Затем мне нужно было бы различать различные ошибки, которые были бы выбрасываны, если только ошибки не являются достаточно обобщенными, тогда это может быть неважно. Посмотрел документацию Apple и ничего не видел по этому поводу.

Ответы

Ответ 1

Я думаю, что второй способ лучше

Предположим, что у меня есть две функции

 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
}

Тогда я назову это так

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

Это будет журнал

Thing 1
Error1

Если thingOne() не выбрасывает ошибку, она будет записывать

Thing 1
Thing 2
Error2