高阶函数:“不能使用'((_) - > _)''类型的参数列表调用'map'”

时间:2015-02-22 15:30:35

标签: swift higher-order-functions

我想使用swift高阶函数(map)从给定的UIView.subviews数组中删除所有Subviews。这条线

(cell.contentView.subviews as [UIView]).map { $0.removeFromSuperView() }

导致错误 “无法使用'((_) - > _)'”

类型的参数列表调用'map'

我想知道编译器在这一点上需要什么。

1 个答案:

答案 0 :(得分:22)

我会说地图不适合这种操作。它基于其他序列元素创建一个新序列,但是你不想创建一个序列,你只想迭代它们并将一个函数应用于它们。在swift中没有符合你想要的高阶函数,我希望他们能尽快投入一些东西。因此,您可以做的最好的事情是使用for循环或编写您自己的函数,它可以满足您的需求。

我想建议你自己写一个功能(基于foreach的scalas):

extension Array {

    func foreach(function: T -> ()) {
        for elem in self {
            function(elem)
        }
    }
}

使用Swift 2.0更新

forEach已添加到SequenceType,因此可以使用:

(cell.contentView.subviews as [UIView]).forEach { $0.removeFromSuperview() }