2016-08-31 13 views
0

auf Fehler i eine Funktion zu implementieren versuchen Integer aus Einefunktion mit Try-Catch in schnellenGeworfen Ausdrucksart immer nicht bestätigt Typ

//Enum 
enum LengthError: ErrorType { 
    case NoInt 
    case Default 
} 


    // get Max length From Key else throws error 


    func getMaximumLength() throws -> Int? { 

      guard let length = Int(getStringForKey("KEY")) else { 
       throw LengthError.NoInt 
      } 

      return length 
     } 

    // This function 
     func getMaxLength() -> Int { 

      var maxLength: Int? 
      do { 
       maxLength = try getMaximumLength() 

      } catch LengthError.NoInt { 

       maxLength = 20 

      } catch LengthError.Default { 
       maxLength = 20 

      } catch { 
       maxLength = 20 
      } 

      return maxLength 
     } 

aber Compiler zeigt Fehler erhalten bei getMaximumLength() Func als „Thrown Ausdruckstyp 'String' bestätigt nicht 'ErrorType' ".

Wie behebt man dieses Problem?

+0

@Hamish wo ich genau schließende Klammer am fehle? und ya derzeit nicht besorgt über optionale Rückkehr, das kann leicht später gelöst werden., Trotzdem vielen Dank dafür – sulabh

+0

ohh, das ist kein Problem in meinem tatsächlichen Code, es könnte während des Einfügens hier im Stapel verpasst haben. – sulabh

+0

Könnten Sie bitte ein [mcve] posten? Der einzige Fehler, den Ihr aktueller Code gibt (wenn er in Swift 2.3 kompiliert wird), ist, dass Sie versuchen, ein optionales Element in einer Funktion zurückzugeben, die eine nicht-optionale Rückgabe ('return maxLength' in' getMaxLength() ') und die Funktion erwartet 'getStringForKey (_ :)' ist nicht definiert. – Hamish

Antwort

1

bekam ich Ihren Code auf dem Spielplatz zu arbeiten:

//Enum 
enum LengthError: ErrorType { 
    case NoInt 
    case Default 
} 

func getMaximumLength() throws -> Int? { 
    guard let length = Int(getStringForKey("KEY")) else { 
     throw LengthError.NoInt 
    } 

    return length 
} 

// This function 
func getMaxLength() -> Int { 
    var maxLength: Int? 
    do { 
     maxLength = try getMaximumLength() 
    } catch LengthError.NoInt { 
     maxLength = 20 
    } catch LengthError.Default { 
     maxLength = 20 
    } catch { 
     maxLength = 20 
    } 

return maxLength! 
} 

func getStringForKey(key : String) -> String { 
    if key == "KEY" { 
     return "654" 
    } else { 
     return "none" 
    } 
} 

getMaxLength() 
+0

Nun danke, ich sauber und wieder zu bauen, Problem war weg.Scheint wie xcode Problem, sowieso :) – sulabh

+0

Ive hatte das schon einmal passieren. Es kann ein echter Kopfschmerz sein! Hoffe, ich habe geholfen. –

Verwandte Themen