print([ [1, 2], [3, 4]].flatMap{_ in })
问问题
169 次
1 回答
1
一个特定的重载flatMap
已被弃用。这是使用此签名的flatMap
方法:Sequence
func flatMap<ElementOfResult>( _ transform: (Self.Element) throws -> ElementOfResult? ) rethrows -> [ElementOfResult]
自 Swift 4.1 以来,它已被弃用。您可以观看Point-Free 的第 10 集“两个平面地图的故事”</a>,详细了解它被弃用的原因。(那一集可以免费观看。)
但是,编译器被迫选择flatMap
此处已弃用的重载。
对于的非弃用版本flatMap
,该transform
函数必须返回某种类型的Sequence
。这就是 (non-deprecated) 的全部要点flatMap
:输入的每个元素都变成了 some Sequence
,并且这些Sequence
s 被连接(展平)成单个输出数组。
但是你的transform
return Void
, and Void
(它是空元组的别名,()
)不是a Sequence
。所以编译器不能使用非弃用的flatMap
.
但是,编译器可以隐式提升您transform
返回一个Optional<Void>
,然后让编译器使用不推荐使用的flatMap
来编译代码。
编写语句的正确方法是使用map
而不是flatMap
,因为您返回的是单个值 ( ()
) 而不是 a Sequence
:
[[1, 2], [3, 4]].map { _ in }
于 2021-08-26T13:32:13.360 回答