Swift 是否有一种更简洁的替代方法来代替if-let调用可选的函数?
我经常发现自己有以下结构:Swift 是否有一种更简洁的替代方法来代替if-let调用可选的函数?,swift,functional-programming,optional,Swift,Functional Programming,Optional,我经常发现自己有以下结构: let maybeValue: SomeType? = ... if let definitelyValue = maybeValue { return someFunc(definitelyValue) } else { return nil } 如果someFunc是一种方法,我会简单地使用链接(maybeValue?.someMethod),如果我的目标是非可选的via default,我会使用nil coalescing操作符(maybeVa
let maybeValue: SomeType? = ...
if let definitelyValue = maybeValue {
return someFunc(definitelyValue)
} else {
return nil
}
如果
someFunc
是一种方法,我会简单地使用链接(maybeValue?.someMethod
),如果我的目标是非可选的via default,我会使用nil coalescing操作符(maybeValue??defaultValue
),但是上面的if-let明显不如这些选项整洁。您可以使用忽略中间值_
let maybeValue: SomeType? = ...
if let _ = maybeValue {
return someFunc(maybeValue!)
} else {
return nil
}
这至少可以避免使用另一个变量。您可以在可选类型上使用map或flatMap。flatMap基本上在且仅当值存在时计算传递给它的闭包 这是一个样本
let maybeValue: String? = "awesome swift"
let val = maybeValue.flatMap { $0.uppercased() }
“你找过副本吗?”苏尔坦我找过,但显然用词不对!我同意这是与马丁·林克问题的重复。为什么投反对票?我回答了这个问题,并提供了一个小小的优势。如果让强制打开它,有什么意义?您已经检查过这样做是安全的。
提供了一个小小的优势
哪一个?将一个变量名替换为“\”,然后在另一个变量名中添加一个字符。这怎么会比正常的方式更“整洁”?我真的不喜欢这种方法——我认为强制展开通常是一种代码味道。如果我那么担心这个变量,我真的更愿意重用这个名称:If let value=value{return someFunc(value)}
。