gpt4 book ai didi

swift - 在内联条件语句中解包可选

转载 作者:行者123 更新时间:2023-11-28 06:21:37 26 4
gpt4 key购买 nike

在 Swift 中,有没有办法在内联条件语句中解包可选?在某些情况下,nil 合并运算符 ?? 不起作用,例如必须在函数中使用被解包的可选对象时。

例如,假设 f 具有签名 func f(a:Int) -> Bool 并读取 A ? B : C as 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

但我更愿意尽可能避免使用 !

最佳答案

是的。 map 可以应用于可选值,如果值不是 nil 则执行闭包,否则返回 nil。然后,您可以使用 nil 合并运算符 来解包 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?

Description

Evaluates the given closure when this Optional instance is not nil, passing the unwrapped value as a parameter. Use the map method with a closure that returns a nonoptional value.


关于swift - 在内联条件语句中解包可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43267881/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com