2015-08-04 3 views
13

Update auf 2.0 mit 7 Xcode Beta behandelt 4Swift 2.0 Fehler von hier geworfen werden nicht

Ich habe diesen Code Block

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

Und sein mir den Fehler geben (auf der try Linie)

Von hier geworfene Fehler werden nicht behandelt.

Ist das ein Compilerfehler oder fehlt mir etwas in meiner Syntax?

Ich überprüfte die Dokumente und mein Code sieht richtig aus.

+0

'Ersetzen println' von' print' und Relaunch 'xcode'. Vielleicht hat der Compiler Probleme. –

Antwort

2

Kann ein Compiler-Fehler sein. Wie auch immer, versuchen Sie, let err as NSError zu entfernen; catch allein reicht, wenn Sie alle Fehler abfangen wollen.

Auch mit Swift 2 sollten Sie print, nicht println verwenden.

Der folgende Code kompiliert ohne Fehler mit XCode 7 Beta 4:

import AVFoundation 

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

Ich hatte das vor dem Posten versucht, hat auch nicht funktioniert. Ich denke, diese Beta 4 ist viel zu instabil. – Aggressor

+0

Haben Sie genau diesen Code versucht ?. Wie auch immer, ich habe gerade meine Antworten mit einem Code-Snippet aktualisiert, das ohne Probleme mit XCode 7 Beta 4 kompiliert. –

+0

Ich denke, Theres Problem mit meinem Projekt als Ganzes. Theres 200+ Fehler und die Syntax-Highlighting und Autocomplete stürzt die zweite Ich versuche zu tippen (genau wie die erste Version von Swift das ist unglaublich instabil). – Aggressor

17

, welche Arten von Fehlern kann AVAudioSession.sharedInstance().setActive(true) Wurf?
Wenn es nur NSError s auslösen kann, müssen Sie dies nicht angeben, wenn Sie den Fehler abfangen. Sie könnten einfach schreiben:

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

Wenn Sie den Fehler in Ihrem catch -scope verwenden möchten, können Sie immer noch darauf zugreifen können. Swift automatisch bindet den geworfen Fehler error, die verwendet werden können:

catch { 
    // do something with `error` 
} 

Wenn das Verfahren mehrere Arten von Fehlern führt, und Sie wollen nur mit denen beschäftigen, die NSError s sind, können Sie bedingt binden sie:

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

Sie müssen jedoch sicherstellen, dass jeder geworfene Fehler behandelt wird. So unter der Annahme, dass das Verfahren auch ein RandomError werfen kann (was ich gerade jetzt aus), würden Sie schreiben müssen:

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

... neben die catch der NSError.
Oder Sie könnten natürlich den allgemeinen Fall verwenden:

catch { 
    // do something with `error` 
} 

Also gehe ich davon aus, Ihr Problem kann let err as NSError durch Entfernen von Ihrem catch -Aussage gelöst werden.

+2

Ja, der Compiler ist kaputt, denke ich. Autocomplete schlägt fehl (zusammen mit Syntaxhervorhebung), und ich habe versucht, die Generika und und spezifische hätte geworfen (keine gearbeitet). Ich hätte es in meinem Beitrag erwähnen sollen. Entschuldigungen für die Auslassung. – Aggressor

+0

Ich werde auch nächstes Mal einen Screenshot posten, ich denke, dass es einer Situation wie diesem Gewicht verleiht haha. – Aggressor

+0

Wenn es hilft, fügen Sie es hinzu :) –

-1

Überprüfung dieser Code, werden Sie Idee auf try/catch erhalten:

enum ErrorMessages :ErrorType { 
    case ErrorDescription 
    } 

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