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

if let a = b.val {

} else {

}

当前回答

If let语句

Swift if let可选绑定(称为if-let语句)用于提取存在的非可选值,或者如果值为nil则不执行任何操作。

斯威夫特的if-let声明:

let b: Int? = 50

if let a: Int = b {
    print("Good news!")
} else {
    print("Equal to 'nil' or not set")
}

/*  RESULT: Good news!  */

在Kotlin中,就像在Swift中一样,为了避免在不期望的情况下试图访问空值而导致的崩溃,提供了一个特定的语法(如第二个例子中的b.let{})来正确地展开可空类型:

Kotlin相当于Swift的if-let语句:

val b: Int? = null
val a = b

if (a != null) { 
    println("Good news!")
} else { 
    println("Equal to 'null' or not set")
}

/*  RESULT: Equal to 'null' or not set  */

Kotlin的let方法与安全调用操作符?:结合使用时,提供了一种处理可空表达式的简洁方法。

Kotlin的内联let函数和Swift的nil合并运算符的Elvis运算符:

val b: Int? = null

val a = b.let { nonNullable -> nonNullable } ?: "Equal to 'null' or not set"
println(a)

/*  RESULT: Equal to 'null' or not set  */

警卫让声明

Swift中的guard-let语句简单而强大。它检查某些条件,如果计算结果为false,则执行else语句,该语句通常会退出一个方法。

让我们来看看斯威夫特的这句话:

let b: Int? = nil

func method() {
    guard let a: Int = b else {
        print("Equal to 'nil' or not set")
        return
    }
    print("Good news!")
}
method()

/*  RESULT: Equal to 'nil' or not set  */

Kotlin对霉霉的保守声明也有类似的影响:

与Swift不同的是,在Kotlin中根本没有警卫声明。但是,您可以使用Elvis Operator - ?:来获得类似的效果。

val b: Int? = 50

fun method() {
    val a = b ?: return println("Equal to 'null' or not set")
    return println("Good news!")
}
method()

/*  RESULT: Good news!  */

其他回答

与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)

If let语句

Swift if let可选绑定(称为if-let语句)用于提取存在的非可选值,或者如果值为nil则不执行任何操作。

斯威夫特的if-let声明:

let b: Int? = 50

if let a: Int = b {
    print("Good news!")
} else {
    print("Equal to 'nil' or not set")
}

/*  RESULT: Good news!  */

在Kotlin中,就像在Swift中一样,为了避免在不期望的情况下试图访问空值而导致的崩溃,提供了一个特定的语法(如第二个例子中的b.let{})来正确地展开可空类型:

Kotlin相当于Swift的if-let语句:

val b: Int? = null
val a = b

if (a != null) { 
    println("Good news!")
} else { 
    println("Equal to 'null' or not set")
}

/*  RESULT: Equal to 'null' or not set  */

Kotlin的let方法与安全调用操作符?:结合使用时,提供了一种处理可空表达式的简洁方法。

Kotlin的内联let函数和Swift的nil合并运算符的Elvis运算符:

val b: Int? = null

val a = b.let { nonNullable -> nonNullable } ?: "Equal to 'null' or not set"
println(a)

/*  RESULT: Equal to 'null' or not set  */

警卫让声明

Swift中的guard-let语句简单而强大。它检查某些条件,如果计算结果为false,则执行else语句,该语句通常会退出一个方法。

让我们来看看斯威夫特的这句话:

let b: Int? = nil

func method() {
    guard let a: Int = b else {
        print("Equal to 'nil' or not set")
        return
    }
    print("Good news!")
}
method()

/*  RESULT: Equal to 'nil' or not set  */

Kotlin对霉霉的保守声明也有类似的影响:

与Swift不同的是,在Kotlin中根本没有警卫声明。但是,您可以使用Elvis Operator - ?:来获得类似的效果。

val b: Int? = 50

fun method() {
    val a = b ?: return println("Equal to 'null' or not set")
    return println("Good news!")
}
method()

/*  RESULT: Good news!  */

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习惯用法相同的语义。

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

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

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