我需要打开可选控件并将其用作函数的参数。如果可选值为nil,那么我需要默认为特定值。
是否有更短/更简洁的方式编写此示例?
func iTake(aNonOptional nonOptionalInt: Int) -> Float {
// do something with nonOptionalInt
return Float(nonOptionalInt) * 0.125
}
var anOptionalInt: Int?
let aSpecificDefaultReturnValue: Float = 0.99
let result: Float
if let aNonOptionalInt = anOptionalInt {
result = iTake(aNonOptional: aNonOptionalInt)
} else {
result = aSpecificDefaultReturnValue
}
我的实际用例更加复杂,但这就是想法。
该函数无法重写,但是可以更好地编写if let
吗?
谢谢。
答案 0 :(得分:2)
var anOptionalInt: Int?
let aSpecificDefaultReturnValue: Float = 0.99
let result = anOptionalInt.map { iTake(aNonOptional: $0) } ?? aSpecificDefaultReturnValue
您可以使用Swift Optional
枚举具有map
函数的事实,并将其与nil合并运算符结合使用:
Optional.map
在可选的“框”内查找(如果在框内找到了东西),则使用您提供的变换来更改值;如果框内没有任何内容,则忽略该变换(即{ {1}}。nil
基本上说:“如果那不是nil,则返回我剩下的所有东西,否则返回我右边的所有东西。” 答案 1 :(得分:-2)
您也可以那样做:
let result: Float = (anOptionalInt != nil) ? iTake(aNonOptional: anOptionalInt!) : aSpecificDefaultReturnValue
如果anOptionalInt
不为nil,则调用iTake函数,以anOptionalInt
变量的unwrapped值作为参数(此处可以强制展开,因为我们已经检查了它是否为nil。 )。如果为零,则保留默认值作为结果。