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

if let a = b.val {

} else {

}

当前回答

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

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

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

第二条似乎更好。

其他回答

下面是如何只在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
    }

如果b是一个成员变量,那么这种方法对我来说似乎是最有可读性的:

val b = this.b
if (b == null) {
    return
}
println("non nullable : ${b}")

这也与它在swift中的工作方式一致,在swift中,一个新的局部变量遮蔽了成员变量。

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

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

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

第二条似乎更好。

这是我的变体,仅限于非常常见的“if not null”情况。

首先,在某个地方定义它:

inline fun <T> ifNotNull(obj: T?, block: (T) -> Unit) {
    if (obj != null) {
        block(obj)
    }
}

它可能应该是内部的,以避免冲突。

现在,转换这个Swift代码:

if let item = obj.item {
    doSomething(item)
}

到这个Kotlin代码:

ifNotNull(obj.item) { item -> 
    doSomething(item)
}

请注意,在Kotlin中,你可以删除参数并使用它:

ifNotNull(obj.item) {
    doSomething(it)
}

但是如果代码块超过1-2行,最好是显式的。

这是我所能找到的最相似的斯威夫特。