kotlin验证输入字段

时间:2017-06-12 14:38:40

标签: android kotlin

我正在从Java迁移到Kotlin进行Android开发。我想检查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

  3. 为什么呢? takeUnless{}将String转换为Unit?

    由于

1 个答案:

答案 0 :(得分:3)

该方法中的第一个语句类似于Java中的以下内容。

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

这就是ClassCastException如果presenter.usernameError()Unit - 类型(或Java中的void)函数的原因。我想这不是你想要的。

如果presenter.usernameError()presenter.passwordError()都是Unit类型的函数,您可以

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

presenter.signInWithUsernameAndPassword(username as String,password as String)

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