在Swift中,有没有办法在内联条件语句中展开可选项?有些情况下,无合并运算符??
不起作用,例如必须在函数中使用可选的解包时。
例如,假设f具有签名func f(a:Int) -> Bool
并且将A ? B : C
读为if A { B } else { C }
,则以下内容可能有意义:
var c:Int?
let a:Bool = let b = c ? f(b) : false
显然,这可以使用!
:
let a:Bool = b != nil ? f(b!) : false
但我更愿意尽可能避免使用!
。
答案 0 :(得分:1)
是。 map
可以应用于可选项,如果值不是nil
则执行闭包,否则返回nil
。然后,您可以使用 nil coalescing运算符来展开map
的结果:
let a = b.map { f($0) } ?? false
正如@Alexandar在评论中指出的那样,因为你的函数只需要一个参数,所以只需传递函数名即可编写map
:
let a = b.map(f) ?? false
完整示例
func f(_ a:Int) -> Bool {
return a > 17
}
var b:Int? = 18
let a1 = b.map(f) ?? false
print(a1) // true
b = nil
let a2 = b.map(f) ?? false
print(a2) // false
func map<U>(_ transform: (Wrapped) throws -> U) rethrows -> U?
<强>描述强>
当此Optional实例不为nil时,计算给定的闭包,将未包装的值作为参数传递。 将map方法与一个返回非可选值的闭包一起使用。