如果让的话,Kotlin 相当于 swift 吗?- 对于类变量?

War*_*zit 1 kotlin

我知道,.let {}但评估的表达式在 lambda 表达式中,如果您需要在方法中返回某些内容,则该表达式效果不佳。

有问题的代码示例

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

    return magicTrick
  } 
  return false
}
Run Code Online (Sandbox Code Playgroud)

有没有比这更好的方法

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

    return magicTrick
  } else {
    return false
  }
}
Run Code Online (Sandbox Code Playgroud)

Swift 等价物

fun method(): Int {
  if let tempObject = anObject {
    let calculatedValue = tempObject.awesome()
    let magicTrick = calculatedValue + randomMethodName()

    return magicTrick
  } else {
    return false
  }
}
Run Code Online (Sandbox Code Playgroud)

Ric*_* Mo 5

事实上,你的 swift 代码可以更简单,没有 if let

func method() -> Boolean { return anObject?.someBoolean ?? false }
Run Code Online (Sandbox Code Playgroud)

如果这是您要实现的实际方法,则 kotlin 等效项是:

fun method() : Boolean = anObject?.someBoolean ?: false
Run Code Online (Sandbox Code Playgroud)

如果您需要从可选的属性计算布尔值:

fun method() : Boolean = anObject?.someProperty?.let{functionThatReturnBoolean(it)} ?: false
Run Code Online (Sandbox Code Playgroud)

.let{} 返回其正文中的最后一行,这在许多情况下很有用。

someThing?.let{}null如果someThingnull由于可选链接,将返回。

?:是等效于??in swift的默认值运算符,当其 lhs 为 时,它返回 rhs 上的值null