【问题标题】:Change type to non-optional after get rid of nils by applying filter通过应用过滤器摆脱 nil 后将类型更改为非可选
【发布时间】:2023-03-16 02:45:02
【问题描述】:
let elements: [(Int?, Int?)] = [(1, 2), (2, 1), (3, nil), (nil, 3), (5, 6), (6, 5)]
let result = elements.filter { $0.0 != nil } as! [(Int, Int?)]

有没有更简洁的方法来获得部分非可选类型?无需强制解包...
当我们过滤掉 nil 时,编译器应该很明显我们会得到一些非可选的东西。就像我们应用 compactMap 的情况一样。

【问题讨论】:

    标签: swift optional swift5


    【解决方案1】:

    这是一种无需强制解包但仍然可读的方法:

    let result = elements.compactMap { $0 as? (Int, Int?) }
    

    打印出result表明它可以工作:

    [(1, Optional(2)), (2, Optional(1)), (3, nil), (5, Optional(6)), (6, Optional(5))]
    

    【讨论】:

      【解决方案2】:

      我能想到的不强制解包 (!) 的唯一方法是:

      let result = elements.compactMap { (x, y) in x.map { ($0, y) } }
      

      但这牺牲了可读性。老实说,我只会保持原力展开。这不是一个“绝对邪恶”的事情。有时你需要它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-12
        • 1970-01-01
        • 1970-01-01
        • 2021-02-19
        • 1970-01-01
        相关资源
        最近更新 更多