gpt4 book ai didi

swift - compactMap 结果是奇怪的类型

转载 作者:可可西里 更新时间:2023-11-01 00:55:19 25 4
gpt4 key购买 nike

我希望 allMembers[Member] 类型。但它的类型是 [[Member]]。为什么 compactMap 不返回 [Member] 类型的结果?

class Team {
let members = Array(repeating: Member(), count: 2)
}

class Member {
}

let teams = Array(repeating: Team(), count: 3)
let allMembers = teams.compactMap { $0.members }

最佳答案

你实际上需要flatMap , 不是 compactMap .

即使以前(Swift 4.1 之前),compactMap也被称为 flatMap ,它与当前的 flatMap 具有不同的实现和函数签名, 自 compactMap可以用来代替连续的 mapfilter调用 map每个元素到一个新元素,同时只保留 non-nil元素。另一方面,flatMap在映射元素时展平嵌套列表。

This是否仍然存在 flatMapSequence , 而 this是已弃用的 flatMapSequence已重命名为 compactMap .如您所见,重命名版本的函数签名是

func flatMap<ElementOfResult>(_ transform: (Self.Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult]

,所以它的闭包输入参数返回一个 Optional值(就像 compactMap 现在一样),而仍然存在的 flatMap有一个函数签名

func flatMap<SegmentOfResult>(_ transform: (Self.Element) throws -> SegmentOfResult) rethrows -> [SegmentOfResult.Element] where SegmentOfResult : Sequence

,它不返回 Optional在它的关闭中。

您应该使用未弃用的 flatMap展平你的嵌套 Array<Array<Member>> .

let allMembers = teams.flatMap { $0.members }

关于swift - compactMap 结果是奇怪的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50720015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com