Vraag Swift 2.0 Fouten die hier worden gegenereerd, worden niet verwerkt


Updaten naar 2.0 met Xcode 7 Beta 4

Ik heb dit codeblok

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

En het geeft me de fout (op de try lijn)

Fouten die hier worden gegenereerd, worden niet verwerkt.

Is dit een compileerfout of ontbreekt er iets in mijn syntaxis?

Ik controleerde de documenten en mijn code 'ziet er goed uit'.


13
2017-08-04 20:32


oorsprong


antwoorden:


Welke soorten fouten kunnen AVAudioSession.sharedInstance().setActive(true) Gooi?
Als het alleen kan gooien NSErrors, dan is het niet nodig om dit op te geven bij het opvangen van de fout. Je zou gewoon kunnen schrijven:

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

Als u de fout in uw wilt gebruiken catch-scope, je hebt er nog steeds toegang toe. Swift bindt de geworpen fout automatisch aan error, die kan worden gebruikt:

catch {
    // do something with `error`
}

Als de methode meerdere soorten fouten genereert en u alleen de problemen wilt oplossen die dat wel zijn NSErrors, je kunt ze voorwaardelijk binden:

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

U moet er echter voor zorgen dat elke weggegooide fout wordt afgehandeld. Dus ervan uitgaande dat de methode ook een a kan gooien RandomError (die ik net verzonnen heb), zou je moeten schrijven:

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

... in aanvulling op de catch van de NSError.
Of u kunt natuurlijk de algemene casus gebruiken:

catch {
    // do something with `error`
}

Dus ik neem aan dat je probleem kan worden opgelost door het te verwijderen let err as NSError, van jouw catch-uitspraak.


17
2017-08-05 15:00



Kan een compileerbug zijn. Hoe dan ook, probeer het te verwijderen let err as NSError ; catch alleen is genoeg als je alle fouten wilt opvangen.

Ook zou je Swift 2 moeten gebruiken print, niet println.

De volgende code compileert zonder fouten met XCode 7 Beta 4:

import AVFoundation

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

2
2017-08-04 21:13



vink deze code aan die je een idee geeft over try / catch:

    enum ErrorMessages :ErrorType {
    case ErrorDescription
    }

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

-1
2017-09-29 07:02