2017-05-09 57 views
0

我经常发现自己通过类似以下的结构:是否有一个更好的替代方法让if调用一个可选的函数?

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

如果someFunc是一个方法,我会简单地使用链接(maybeValue?.someMethod),如果我的目标是通过默认非可选我会使用无合并运算符(maybeValue ?? defaultValue),但上面的if-let明显比这些选项少。

+0

难道你寻找重复? – Sulthan

+0

@Sulthan我做了,但显然没有正确的措辞!我同意这是马丁联系的问题的重复。 – Sam

回答

-2

我忘记了最常见的功能编程工具之一:map

的整洁以上版本看起来是这样的:

let maybeValue: SomeType? = ... 
return maybeValue.map(someFunc) 

顺便说一句,如果someFunc也返回了可选的,你将与flatMap取代map

-2

您可以通过使用_

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

至少省去了使用其他变量忽略中间值。

+0

为什么选择投票?我正在回答这个问题,并提供了一点优势。 – iCyberPaul

+3

如果你打算强行打开它,那么“如果让”就有什么意义呢? – Desdenova

+0

您已检查确实安全。 – iCyberPaul

0

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

这里有一个例子,

let maybeValue: String? = "awesome swift" 

let val = maybeValue.flatMap { $0.uppercased() } 
相关问题