2017-04-08 3 views
0

Rückgabewert Ich versuche, den booleschen Wert von der Funktion zurückzugeben.Wie Wert von der Funktion in Kotlin

fun validateDetails(jabberId:String, passwordText: String) { 

      if(jabberId.isEmpty()){ 
       jabber_id.requestFocus() 
       jabber_id.error="Jabber id can't be null." 
       return false 
      }else if(jabberId.isBlank()){ 
      jabber_id.requestFocus() 
      jabber_id.error="Jabber id can't be blank." 
       return false 
      }else if (passwordText.isNotEmpty()){ 
       password.requestFocus(); 
       password.error="Password can't be null." 
       return false 
      } 
      else{ 
       return true 
      } 

    } 

Fehler: Der boolean wörtliche entspricht nicht den erwarteten Typ Einheit.

Ich weiß, Einheit ist der Standard Rückgabetyp in Kotlin. Wie ändere ich das zu boolean.

+0

Entfernen Sie das '=' vor der geschweiften Klammer. Und bitte, setzen Sie Ihren Code richtig ein. –

+0

@JBNizet entfernt. aber immer noch gleichen Fehler –

+1

Fügen Sie den Rückgabetyp der Funktion hinzu: ': Boolean'. –

Antwort

3

Kotlin kann nur die zurück Typ einer Funktion schließen, wenn es ein Ausdruck, so dass, wenn Ihre Funktion einen Körper hat, müssen Sie den zurückgegebenen Typ, nachdem die Funktion parameters

fun functionName(param: Type...): ReturnedType { 
    //function body 
} 

fun validateDetails(jabberId:String, passwordText: String):Boolean { 

      if(jabberId.isEmpty()){ 
       jabber_id.requestFocus() 
       jabber_id.error="Jabber id can't be null." 
       return false 
      }else if(jabberId.isBlank()){ 
      jabber_id.requestFocus() 
      jabber_id.error="Jabber id can't be blank." 
       return false 
      }else if (passwordText.isNotEmpty()){ 
       password.requestFocus(); 
       password.error="Password can't be null." 
       return false 
      } 
      else{ 
       return true 
      } 

    } 

Wie glee8e erwähnt angeben, diese könnte mit einem Ausdruck gemacht werden. So würde es gemacht werden.

fun validateDetails(jabberId:String, passwordText: String) = when { 
    jabberId.isEmpty() -> { 
     jabber_id.requestFocus() 
     jabber_id.error="Jabber id can't be null." 

     false 
    } 

    jabberId.isBlank() -> { 
     jabber_id.requestFocus() 
     jabber_id.error="Jabber id can't be blank." 

     false 
    } 

    passwordText.isNotEmpty() -> { 
     password.requestFocus(); 
     password.error="Password can't be null." 
     false 
    } 

    else -> true 
} 
+0

Alternativ können Sie diesen Funktionskörper in einen einzelnen Ausdruck konvertieren, da es nur ein großer if-Ausdruck ist. – glee8e

+0

Habe gerade meine Antwort aktualisiert. Danke, dass du das herausgefunden hast. xD Ich werde immer noch mit der Macht von Kotlin gewöhnen, also habe ich nicht einmal über diese Möglichkeit nachgedacht –

+0

Da Sie Kotlin verwenden, nehme ich an, Sie verwenden auch IDEA (erstellt von den JetBrains, das Team hinter Kotlin), die Energie, auf die Sie achten sollten. Wenn Sie den Zeiger innerhalb des Methodenkörpers (Ihres Anwsers) setzen, schlägt er Ihnen vor, ihn in einen Ausdruckskörper zu ändern. – glee8e

Verwandte Themen