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

if let a = b.val {

} else {

}

当前回答

与Swift不同的是,在Kotlin中使用它之前,不需要打开可选选项。我们可以检查该值是否为非空,编译器会跟踪您执行的检查信息,并允许将其作为解包装使用。

迅速:

if let a = b.val {
  //use "a" as unwrapped
} else {

}

在芬兰湾的科特林:

if b.val != null {
  //use "b.val" as unwrapped
} else {

}

更多这样的用例请参考Documentation:(null-safety)

其他回答

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

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

yourOptionalString ?: return

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

这是我的变体,仅限于非常常见的“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行,最好是显式的。

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

我的答案完全是抄袭别人的。但是,我不容易理解他们的表情。所以我想提供一个更容易理解的答案会很好。

迅速:

if let a = b.val {
  //use "a" as unwrapped
}
else {

}

在芬兰湾的科特林:

b.val?.let{a -> 
  //use "a" as unwrapped
} ?: run{
  //else case
}

在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