如何在 swift 5 中使用 CompactMap 解包元组

How to unwrap tuple with CompactMap in swift 5

我是踢铃

我一般用CompactMap去掉nil

例如,

let wrappedArray = [nil, 2, 6, "ddf"].compactMap{ [=11=] }

wrappedArray //[2, 6, "ddf"]

并且,我想要相同的结果元组。但是,它没有像我预期的那样工作。

我该怎么办?

有时间请回复

感谢您的帮助。

let tuple: [(Bool?, Int?)] = [
  (state: true, value: 3),
  (state: true, value: nil),
  (state: nil, value: 55),
  (state: false, value: nil)
]

let wrappedTuple = tuple.compactMap{[=12=]}

wrappedTuple
//[(.0 Optional(true), .1 3),
//(.0 Optional(true), nil),
//(nil, .1 55),
//(.0 Optional(false), nil)]

let wrappedTuple = tuple.compactMap{[=14=]} 如果你有(注意最后一个?):

        let tuple: [(Bool?, Int?)?] = [  // <-- here
          (state: true, value: 3),
          (state: true, value: nil),
          (state: nil, value: 55),
          (state: false, value: nil),
          nil,
          nil
        ]

你可能想要的(与你原来的元组)是使用过滤器,例如:

 let wrappedTuple = tuple.filter{ [=11=].0 != nil && [=11=].1 != nil }

并根据需要调整逻辑。

如果你想要元组中的非可选值作为结果,试试这个:

 let wrappedTuple = tuple.filter{ [=12=].0 != nil && [=12=].1 != nil }.map{ ([=12=].0!,[=12=].1!) }

您仍然可以像这样使用 compactMap。这真的取决于什么 你想实现。

 let wrappedTuple = tuple.compactMap{[=13=].0}