0
print([ [1, 2], [3, 4]].flatMap{_ in })

在此处输入图像描述

4

1 回答 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,并且这些Sequences 被连接(展平)成单个输出数组。

但是你的transformreturn 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 回答