在Kotlin有一个相当于Swift代码下面?
if let a = b.val {
} else {
}
在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