原文:https://useyourloaf.com/blog/swift-non-nil-values-in-an-array-of-optionals/
我发现除了配合我们超级熟悉的 switch
语句,很难想起有别的地方使用 case
语句,这里有个很有用的案例,当你需要对可选的数组中非空值做一些操作时。
这是一个使用场景,一个String
类型的数组,里面有一些值可能为nil
。
|
|
names
的类型是 [String?]
, 一个可选的字符串数组,假设我想对数组里每一个非空的值做一些操作:
|
|
这个doSomething
函数的参数是一个非可选的String
类型. 可以通过if let
语句遍历数组获取non-nil值 :
|
|
这是记住flatMap
高阶函数跳过nil
值的好时机:
|
|
这个方法是不差,但我喜欢用case
语句与可选项匹配的方式:
|
|
enum
有两个语句:.none
和.some(T)
。上面例子可选项(let name?
) 是一个简写,用于匹配 .some
。我们也可以用.some
来写:
|
|
匹配 nil
元素的范式可以这样写:
|
|
你可以用 ?
范式来匹配可选项中的特定值
|
|
使用 where 和 case
你可以更进一步,添加一个where
子句作为数组的过滤器。
|
|
在执行过滤操作之前,我更喜欢使用flatMap
删除nil值,
|
|