在Kotlin有一个相当于Swift代码下面?

if let a = b.val {

} else {

}

当前回答

上面有两个答案,都得到了很多人的接受:

str ?。让{}?:运行{} str ?。还有{}?:run {}

两者似乎都适用于大多数用法,但#1在下面的测试中会失败:

第二条似乎更好。

其他回答

在kotlin中也有类似的方法来实现Swift的if-let风格

if (val a = b) {
    a.doFirst()
    a.doSecond()
}

您还可以分配多个可空值

if (val name = nullableName, val age = nullableAge) {
    doSomething(name, age)
}

如果可空值被使用超过1次,这种方法将更适合。在我看来,它从性能方面有所帮助,因为可为空的值将只检查一次。

来源:Kotlin Discussion

下面是如何只在name不为空时执行代码:

var name: String? = null
name?.let { nameUnwrapp ->
    println(nameUnwrapp)  // not printed because name was null
}
name = "Alex"
name?.let { nameUnwrapp ->
    println(nameUnwrapp)  // printed "Alex"
}

Swift如果让声明在Kotlin

简短的回答是使用简单的IF-ELSE,因为在这篇评论的时候,在Kotlin LET中没有等效的东西,

    if(A.isNull()){
// A is null
    }else{
// A is not null
    }

让我们首先确保我们理解了所提供的Swift习语的语义:

if let a = <expr> {
     // then-block
}
else {
     // else-block
}

它的意思是:“如果<expr>结果为非nil可选,则输入then块,并将符号a绑定到未包装的值。否则进入else块。

特别注意,a只在then块内绑定。在Kotlin中,您可以通过调用很容易地得到这个

<expr>?.also { a ->
    // then-block
}

你可以像这样添加一个else-block:

<expr>?.also { a ->
    // then-block
} ?: run {
    // else-block
}

这将导致与Swift习惯用法相同的语义。

也许我已经很晚了,但最简单的方法是打开和选择

yourOptionalString ?: return

这是下面的所有行都将有解开的字符串