是否有一个更简洁的替代if-let来调用Optional上的函数?

时间:2017-05-09 11:30:50

标签: swift functional-programming optional

我经常发现自己的构造如下:

let maybeValue: SomeType? = ...
if let definitelyValue = maybeValue {
    return someFunc(definitelyValue)
} else {
    return nil
}

如果someFunc是一种方法,我只使用链接(maybeValue?.someMethod),如果我的目标是默认的非可选项,我会使用nil-coalescing运算符({{ 1}}),但上面的if-let比这些选项要小得多。

3 个答案:

答案 0 :(得分:0)

您可以在可选类型上使用地图 flatMap 。 flatMap基本上计算传递给它的闭包,当且仅当值存在时。

以下是一个示例,

let maybeValue: String? = "awesome swift"

let val = maybeValue.flatMap { $0.uppercased() }

答案 1 :(得分:-2)

我忘记了一种最常用的函数式编程工具:maybeValue ?? defaultValue

上述更整洁的版本如下所示:

map

另外,如果let maybeValue: SomeType? = ... return maybeValue.map(someFunc) 也返回了可选项,则会将someFunc替换为map

答案 2 :(得分:-2)

您可以使用_

忽略中间值
let maybeValue: SomeType? = ...
if let _ = maybeValue {
    return someFunc(maybeValue!)
} else {
    return nil
}

至少可以节省使用其他变量的费用。