kotlin验证输入字段

为了Android开发,我正在从Java转移到Kotlin。 我想检查EditText中的字段是否为空。 所以我试图做到这一点:

override fun checkFields() { val username = username.text.toString().trim().takeUnless { username.text.isNullOrEmpty() } ?: presenter.usernameError() val password = password.text.toString().trim().takeUnless { password.text.isNullOrEmpty() } ?: presenter.passwordError() presenter.signInWithUsernameAndPassword(username as String,password as String) } 

但是有两个问题:

  1. 如果用户名/密码为空,它也会传递给signInWithUsernameAndPassword
  2. 它崩溃,因为给我这个错误:

    java.lang.ClassCastException:kotlin.Unit不能转换为java.lang.String

为什么? takeUnless{}将字符串转换为单位?

谢谢

该方法中的第一条语句就像Java中的以下内容。

 String username = !username.text.isNullOrEmpty() ? username.text.toString().trim() : presenter.usernameError(); 

这就是为什么如果presenter.usernameError()Unit type(或Java中的void )函数,则会得到ClassCastException 。 我想这不是你想要的。

假设presenter.usernameError()presenter.passwordError()是一个Unit type函数,你可以

 val username = username.text.toString().trim().takeUnless { it.isNullOrEmpty() } ?: return presenter.usernameError() val password = password.text.toString().trim().takeUnless { it.isNullOrEmpty() } ?: return presenter.usernameError() presenter.signInWithUsernameAndPassword(username as String,password as String) 

it指的是username.text.toString().trim()password.text.toString().trim() ,它们是调用takeUnless方法的实例。