Подтвердить что ты не робот

Swift 2.0 Ошибки, выброшенные отсюда, не обрабатываются

Обновление до версии 2.0 с помощью Xcode 7 Beta 4

У меня есть этот кодовый блок

do
{
    try AVAudioSession.sharedInstance().setActive(true)
} catch let err as NSError
{
    println("Dim background error")
}

И это дает мне ошибку (в строке try)

Ошибки, отброшенные отсюда, не обрабатываются.

Является ли это ошибкой компилятора или есть что-то, отсутствующее в моем синтаксисе?

Я проверил документы, и мой код выглядит правильно.

4b9b3361

Ответ 1

Какие типы ошибок могут выполняться AVAudioSession.sharedInstance().setActive(true) throw?
Если он может только бросать NSError s, тогда нет необходимости указывать это, если вы поймаете ошибку. Вы можете просто написать:

do {
    try AVAudioSession.sharedInstance().setActive(true)
} catch {
    print("Dim background error")
}

Если вы хотите использовать ошибку в своем catch -scope, вы можете получить к ней доступ. Swift автоматически связывает сброшенную ошибку с error, которую можно использовать:

catch {
    // do something with `error`
}

Если метод выдает несколько типов ошибок, и вы хотите иметь дело только с теми, которые являются NSError s, вы можете условно связать их:

catch let specialError as NSError {
    // do something with `specialError`
}

Вы должны убедиться, что каждая брошенная ошибка обрабатывается. Поэтому, полагая, что метод также может выдать RandomError (который я только что сделал сейчас), вам нужно написать:

catch let randomError as RandomError {
    // do something with `randomError`
}

... в дополнение к catch NSError.
Или вы, конечно, можете использовать общий случай:

catch {
    // do something with `error`
}

Итак, я предполагаю, что ваша проблема может быть решена путем удаления let err as NSError из вашего catch -стата.

Ответ 2

Может быть ошибкой компилятора. В любом случае попробуйте удалить let err as NSError; catch достаточно, если вы хотите поймать все ошибки.

Кроме того, с помощью Swift 2 вы должны использовать print, а не println.

Следующий код компилируется без ошибок с помощью XCode 7 Beta 4:

import AVFoundation

class X {
    func y() {
        do {
            try AVAudioSession.sharedInstance().setActive(true)
        } catch {
            print("Dim background error \(error)")
        }
    }
}

Ответ 3

проверьте этот код, который вы получите в try/catch:

    enum ErrorMessages :ErrorType {
    case ErrorDescription
    }

 do
 {
   try AVAudioSession.sharedInstance().setActive(true)
 } catch ErrorMessages.ErrorDescription
   {
    println("Present the error description here")
  }