在一行代码中评估Swift的Bool?为true/false/nil?

5

我有很多这样的代码:

if let x = optbool {
   return f(x)
} else {
   return false
}

这个能不能在一行内表达?


考虑重新设计代码以消除可选项。 - vadian
5个回答

4
以下语句与您的代码等效:
return optbool.map(f) ?? false

如果`optbool == nil`,那么`.map(f)`会返回`nil`,而空合并操作符`?? false`则将其变为`false`。
如果`optbool != nil`,那么`.map(f)`会返回`f(optbool!)`,这也是空合并操作符的结果。

0
如果你的问题是:
“这个能不能写成一行代码?”
答案毫无疑问是肯定的:
if let x = optbool { return f(x) } else { return false }

;-)

说真的,如果optbool不应该是nil,我宁愿把它写成两行:

guard let x = optbool else { return false }
return f(x)

0

试试这个:

return optbool != nil ? f(optbool!) : false

0

如果函数 f(x:Bool)->Bool 返回有效,则您的代码才是有效的。

func foo(b: Bool?)-> Bool {
    if let x = b {
        return f(x)
    } else {
        return false
    }
}

现在这个问题已经没有逻辑了...你可以使用其中之一。

let res1 = f(b ?? false)
let res2 = f(b ?? true)
let res3 = !f(b ?? false)
let res4 = !f(b ?? true)

根据您的 f 函数。

0
如果您将f函数定义为Bool的扩展:
extension Bool {
    func f() -> Bool {
        return true // or false..
    }
}

那么你可以写

return x?.f() ?? false

或者

return x?.f() == true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接