一尘不染

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

swift

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

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

导致错误“无法使用类型’(()-> )’的参数列表调用’map’”

我现在想知道编译器需要我什么。


阅读 337

收藏
2020-07-07

共1个答案

一尘不染

我会说地图不适合这种操作。它基于其他sequence元素创建了一个新序列,但是您不想创建一个序列,而只想遍历它们并将一个函数应用于它们。暂时没有与您想要的功能匹配的高阶函数,我希望他们会尽快投入使用。因此,您最好的办法是使用for循环或编写自己想要的功能。

我想建议您编写自己的functon(基于foreach的标量):

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() }
2020-07-07