swift是否具有像Kotlin一样的标准(范围)功能?

时间:2019-03-03 06:31:54

标签: swift kotlin

在Kotlin中,我们有standard (scope) functions的列表(例如letapplyrun等)

以下用法示例

val str : String? = "123"
str?.let{ print(it) }

这使代码看起来更简洁,而无需使用if (str != null)

我迅速将其编码如下

let str: String? = "123"
if str != nil { print(str!) }

我必须有if str != nil。默认情况下是否提供了let我可以使用的(不用我自己写的)?

仅供参考,我是Swift的新手,到处检查似乎找不到它。

3 个答案:

答案 0 :(得分:6)

如果愿意的话,扩展Optional的功能

extension Optional {
    func `let`(do: (Wrapped)->()) {
        guard let v = self else { return }
        `do`(v)
    }
}

var str: String? = "text"
str.let {
    print( $0 ) // prints `text`
}
str = nil

str.let {
    print( $0 ) // not executed if str == nil
}

答案 1 :(得分:3)

您可以使用Optional.map

let str1 : String? = "123"
str1.map { print($0) }

打印123

let str2 : String? = nil
str2.map { print($0) }

什么都不打印。

因此,如果可选的不是nil,则将其解开并用作map闭包的参数。否则,将不会调用闭包。


一种更加惯用的方法是使用可选绑定:

var str: String? = "123"
if let s = str { 
    print(s) 
}

答案 2 :(得分:1)

显然,进行nil检查的Swift方法

let str: String? = "123"
if let strUnwrapped = str { print(strUnwrapped) }

如果真的想确保它不是nil,请使用guard(感谢@CouchDeveloper指出)

let str: String? = "123"
guard let strUnwrapped = str else { return }

我知道这并没有明确回答是否具有作用域确定功能的问题,但是它为我提供了最初的目的,就是寻找一种Swift方法来检查nil或nonnil,就像我正在寻找的let正在使用Kotlin。