通过应用滤镜消除零点后,将类型更改为非可选

问题描述

Register

是否有一种更干净的方法来获得部分非可选的类型?没有力解开...
当我们过滤掉nil时,对于编译器来说很明显,我们将得到非可选的东西。就像我们应用compactMap的情况一样。

解决方法

这是一种无需强制解包的方法,仍然可以轻松读取:

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

打印出result可以正常工作:

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

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

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

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