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) }
但是有两个问题:
- 如果用户名/密码为空,它也会传递给
signInWithUsernameAndPassword
-
它崩溃,因为给我这个错误:
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
方法的实例。