我有很多像这样的代码:
if let x = optbool {
return f(x)
} else {
return false
}
这可以用一行表达吗?
答案 0 :(得分:3)
以下声明等同于您的代码:
return optbool.map(f) ?? false
如果optbool == nil
,则.map(f)
返回nil
,
并且nil-coalescing运算符?? false
改变了这一点
到false
。
如果optbool != nil
,则.map(f)
返回f(optbool!)
,
这也是零合并算子的结果。
答案 1 :(得分:0)
试试这个:
return optbool != nil ? f(optbool!) : false
答案 2 :(得分:0)
只有当func 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函数
答案 3 :(得分:0)
如果您将f
功能定义为Bool
的扩展名:
extension Bool {
func f() -> Bool {
return true // or false..
}
}
然后你可以写
return x?.f() ?? false
或
return x?.f() == true
答案 4 :(得分:0)
如果您的问题确实存在:
这可以用一行表达吗?
答案无疑是肯定的:
if let x = optbool { return f(x) } else { return false }
- )
说真的,如果optbool
不应该是nil
,我宁愿把它写在两行:
guard let x = optbool else { return false }
return f(x)