像Swift一样如何在Kotlin中进行警戒让语句?

tsn*_*iso 7 kotlin

我想像Swift一样在Kotlin中编写后卫let语句。

例如:

guard let e = email.text , !e.isEmpty else { return }
Run Code Online (Sandbox Code Playgroud)

有什么建议或示例代码吗?

KYH*_*ode 16

尝试

val e = email.text ?: run {
    // do something, for example: Logging
    return@outerFunction
}
Run Code Online (Sandbox Code Playgroud)

如果你之前想做点别的return


far*_*njk 12

尝试

val e = email.text?.let { it } ?: return
Run Code Online (Sandbox Code Playgroud)

说明:这检查属性email.text是否不是null。如果它不为null,则分配该值并移动以执行下一条语句。否则,它将执行该return语句并中断该方法。

编辑:如@dyukha在评论中所建议,您可以删除多余的let

val e = email.text ?: return
Run Code Online (Sandbox Code Playgroud)

如果要检查其他任何条件,则可以使用Kotlin的if表达式。

val e = if (email.text.isEmpty()) return else email.text
Run Code Online (Sandbox Code Playgroud)

或尝试(由@Slaw建议)。

val e = email.text.takeIf { it.isNotEmpty() } ?: return
Run Code Online (Sandbox Code Playgroud)

您可能还希望尝试guard按此处实现的功能:https : //github.com/idrougge/KotlinGuard

  • 为什么不只是`email.text?:return`? (3认同)
  • 如果您仍然想使用 elvis 运算符,可以使用:`val e = email.text.takeIf { it.isNotEmpty() } ?: return`。 (2认同)