当nil应该返回特定的默认值时,在函数参数中快速使用可选的最干净的方法是什么?

时间:2018-10-18 11:49:44

标签: swift parameters optional

我需要打开可选控件并将其用作函数的参数。如果可选值为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吗?

谢谢。

2 个答案:

答案 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基本上说:“如果那不是nil,则返回我剩下的所有东西,否则返回我右边的所有东西。”

答案 1 :(得分:-2)

您也可以那样做:

let result: Float = (anOptionalInt != nil) ? iTake(aNonOptional: anOptionalInt!) : aSpecificDefaultReturnValue

如果anOptionalInt不为nil,则调用iTake函数,以anOptionalInt变量的unwrapped值作为参数(此处可以强制展开,因为我们已经检查了它是否为nil。 )。如果为零,则保留默认值作为结果。