【发布时间】:2019-02-13 05:20:00
【问题描述】:
我有 struct 类型的对象数组 A
struct Caste {
var arr = [1,2]
}
let siri = [Caste(), Caste(), Caste()]
现在我想要一个数组,其中每个对象数组的所有元素如下所示:
let re1 = siri.compactMap { $0.arr }
print("COMPACT: \(re1)")
let re2 = siri.flatMap { $0.arr }
print("FLAT: \(re2)")
结果:
COMPACT: [[1, 2], [1, 2], [1, 2]]
FLAT: [1, 2, 1, 2, 1, 2]
由于在 Swift 4.1 中不推荐使用 flatMap,我尝试使用 compactMap,但它给出的数组不是单个数组。
当我通过 flatMap 获取时,如何通过 compactMap 实现。
【问题讨论】:
-
flatmap的用例未被弃用 -
另一个答案没有很清楚地涵盖的一件事。在 sn-p
siri.compactMap { $0.arr }中,由于闭包预期为(T) -> T?类型,并且由于 Swift 隐式将T类型的值 t 提升为T?类型的可选项,因此实际返回的是 @ 987654329@