如何过滤集合中的 nil 值

96 阅读1分钟

方法一,使用高阶函数 compactMap

let array = [1, 2, nil, 3, 4]
print(array.compactMap { $0 })

compactMap 这个方法名有点难以理解,我们也可以给集合类型添加一个扩展,重新命名一下

extension Collection {
    func removeNils<Wrapped>() -> [Wrapped] where Element == Wrapped? {
        compactMap { $0 }
    }
}

方法二,另一种扩展实现

extension Collection {
    func removeNils<Wrapped>() -> [Wrapped] where Element == Wrapped? {
        var array: [Wrapped] = []
        for value in self {
            if let value {
                array.append(value)
            }
        }
        return array
    }
}

本文同步自微信公众号 “iOS新知”,每天准时分享一个新知识,快来关注我吧!