我经常发现自己的构造如下:
let maybeValue: SomeType? = ...
if let definitelyValue = maybeValue {
return someFunc(definitelyValue)
} else {
return nil
}
如果someFunc
是一种方法,我只使用链接(maybeValue?.someMethod
),如果我的目标是默认的非可选项,我会使用nil-coalescing运算符({{ 1}}),但上面的if-let比这些选项要小得多。
答案 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
}
至少可以节省使用其他变量的费用。