kotlin - 如果让Kotlin相当于迅捷? -对于类变量?

标签 kotlin

我知道.let {},但计算后的表达式位于lambda表达式内,如果您需要在方法内返回某些内容,则该表达式不能很好地工作。

示例问题代码

fun method(): Int {
  if (anyObject != null) {
    val calculatedValue = anObject!!.awesome()
    val magicTrick = calculatedValue + randomMethodName()

    return magicTrick
  } 
  return false
}

是否有比此更好的方法
fun method(): Int {
  val tempObject = anObject
  if (tempObject != null {
    val calculatedValue = tempObject.awesome()
    val magicTrick = calculatedValue + randomMethodName()

    return magicTrick
  } else {
    return false
  }
}

与Swift等效的
fun method(): Int {
  if let tempObject = anObject {
    let calculatedValue = tempObject.awesome()
    let magicTrick = calculatedValue + randomMethodName()

    return magicTrick
  } else {
    return false
  }
}

最佳答案

实际上,没有if let,您的快速代码甚至可以更简单

func method() -> Boolean { return anObject?.someBoolean ?? false }

如果这是您要实现的实际方法,则kotlin等效项是:
fun method() : Boolean = anObject?.someBoolean ?: false

如果需要根据可选属性计算 bool(boolean) 值:
fun method() : Boolean = anObject?.someProperty?.let{functionThatReturnBoolean(it)} ?: false
.let{}返回其主体内的最后一行,这在许多情况下很有用。

如果由于可选链接而someThing?.let{}null,则someThing将返回null
?:是等效于swift的??的默认值运算符,当lhs为null时,它将返回rhs上的值。

关于kotlin - 如果让Kotlin相当于迅捷? -对于类变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55491800/

相关文章:

android - LifecycleScope 中的 Kotlin 协程不会阻塞主线程

android - RxJava 2 - 列表对象中的过滤器列表

kotlin - 我可以将Kotlin中具有默认参数的函数的函数引用作为无参数函数得到吗?

kotlin - 两个构造函数有什么不同?

kotlin - 如何在 micronaut 中使用特定于环境的变量?

android - 导航组件参数默认值

kotlin - Kotlin:函数参数已发送但未执行?

android - 使用 Retrofit 将 Rx apply 转换为 Kotlin 中的 lambda

android - 将配置添加为依赖项是一种令人困惑的行为,不建议这样做

Kotlin 数据类 : how to set a property if I don't know its name at compile time?