2016-07-27 9 views
0

Ich möchte Arten von Objekten in Swift vergleichen. Ich habe eine Funktion, die ein Objekt von NSError als Parameter akzeptiert. Es sollte eine benutzerdefinierte Zeichenfolge zurückgeben.Schnelle Überprüfung Art des Objekts

Es sieht wie folgt aus:

static func getLocalizedErrorText(error: NSError) -> String{ 
    switch error { 
     case is NoConnection: //class NoConnection: NSError 
      return "....." 
     ... 
} 

Aber die Funktion funktioniert nicht wie erwartet. Ich denke, das Hauptproblem ist, dass dieses Beispiel nicht funktioniert:

var dummy = MySubError() //class MySubError: MyBaseError 
var dummy2: MyBaseError? 
dummy2 = MySubError() 

if dummy.dynamicType == MySubError.self { 
     //This will work 
} 

if dummy2.dynamicType == MySubError.self { 
     //This will not work 
} 

Wie kann ich überprüfen, welchen Typ der Parameter hat?

Antwort

2

Sie können für einen Typen überprüfen mit

if error is MySubError { 
    // do stuff 
} 

Sie können auch einen optionalen Guss tun, das wird gelingen, wenn die Art Streichhölzer oder Null zurückgeben, wenn nicht:

let subError = error as? MySubError 

die Sie kann auch in einer guard Prädikat oder if let Anweisung:

if let subError = error as? MySubError { 
    // do stuff 
} 

oder

guard let subError = error as? MySuberror else { return } 
Verwandte Themen