Swift 'if let' statement equivalent in Kotlin

前端 未结 14 1958
心在旅途
心在旅途 2020-12-02 07:32

In Kotlin is there an equivalent to the Swift code below?

if let a = b.val {

} else {

}
14条回答
  •  悲哀的现实
    2020-12-02 08:28

    if let statement.

    Swift's Optional Binding (so called if-let statement) is used to find out whether an optional contains a value, and if so, to make that value available as a temporary constant or variable. So, an Optional Binding for the if-let statement is as follows:

    Swift's if-let statement:

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

    In Kotlin, like in Swift, to avoid crashes caused by trying to access a null value when it’s not expected, a specific syntax (like b.let { } in second example) is provided for properly unwrapping nullable types:

    Kotlin equivalent 1 of Swift's if-let statement:

    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’s let function, when used in combination with the safe-call operator ?:, provides a concise way to handle nullable expressions.

    Kotlin equivalent 2 (Inline let function and Elvis Operator) of Swift's if-let statement:

    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  */
    


    guard let statement.

    guard-let statement in Swift is simple and powerful. It checks for some condition and if it evaluates to be false, then the else statement executes which normally will exit a method.

    Let's explore a Swift's guard-let statement:

    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's similar effect of Swift's guard-let statement:

    Unlike Swift, in Kotlin, there is no guard statement at all. However, you can use the Elvis Operator?: for getting a similar effect.

    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!  */
    

提交回复
热议问题