Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 是否有一种更简洁的替代方法来代替if-let调用可选的函数?_Swift_Functional Programming_Optional - Fatal编程技术网

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
}

这至少可以避免使用另一个变量。

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

这是一个样本

let maybeValue: String? = "awesome swift"

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

“你找过副本吗?”苏尔坦我找过,但显然用词不对!我同意这是与马丁·林克问题的重复。为什么投反对票?我回答了这个问题,并提供了一个小小的优势。如果让强制打开它,有什么意义?您已经检查过这样做是安全的。
提供了一个小小的优势
哪一个?将一个变量名替换为“\”,然后在另一个变量名中添加一个字符。这怎么会比正常的方式更“整洁”?我真的不喜欢这种方法——我认为强制展开通常是一种代码味道。如果我那么担心这个变量,我真的更愿意重用这个名称:
If let value=value{return someFunc(value)}