在Kotlin中,我们有standard (scope) functions的列表(例如let
,apply
,run
等)
以下用法示例
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的新手,到处检查似乎找不到它。
答案 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。