站点图标 Codeun

解答:Swift 中怎么删除数组中 nil 元素

当使用带有 Optional 可选值的数组类型时,可以使用 .compactMap() 方法轻松地过滤掉 nil 元素。


Table of Contents

示例一

有一个 [String?] 的可选字符串的数组 optionalArray ,使用 .compactMap() 方法过滤 nil 值得到 resultArray 结果。

func filterOptional() {
    let optionalArray: [String?] = ["red", "blue", nil, "white", "black"]
    let resultArray: [String] = optionalArray.compactMap { $0 }
    print(resultArray)
    // 输出 ["red", "blue", "white", "black"]
}

optionalNumbers.compactMap { $0 } 是简写形式的传递闭包,完整写法可以参考示例二。


示例二

筛选出来可选字符串的数组 optionalArray 的阿拉伯数字

func filterNums() -> String {
    let optionalArray = ["一", "2", nil, "3", "四"]
    let resultArray = optionalArray.compactMap { numStr in
        // 先通过 if let 解包排除 nil
        if let numStr {
            // 再通过 Int.init?(_ description: String) 方法排除非阿拉伯数字的字符
            return Int(numStr)
        } else {
            return nil
        }
    }
    print(resultArray)
}

退出移动版