如何在 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}
我是踢铃
我一般用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}