Ios Swift,将函数UIView.removeFromSuperview用作视图数组上forEach函数的参数
我想更改以下代码Ios Swift,将函数UIView.removeFromSuperview用作视图数组上forEach函数的参数,ios,swift,functional-programming,Ios,Swift,Functional Programming,我想更改以下代码 let views: [UIView] = [] views.forEach { $0.removeFromSuperview() } 通过另一种方式,我将函数UIView.removeFromSuperview作为参数传递给forEach函数。 类似于 let views: [UIView] = [] views.map { /* transform views to be passed furthe
let views: [UIView] = []
views.forEach {
$0.removeFromSuperview()
}
通过另一种方式,我将函数UIView.removeFromSuperview
作为参数传递给forEach函数。
类似于
let views: [UIView] = []
views.map { /* transform views to be passed further */ }
.forEach(UIView.removeFromSuperview)
有可能吗
更新
根据下面的答案和一些评论,我可以为自己总结一下这个问题的反馈
基于后者,Chris Lattner在一段中提到了一些flip
功能对现有代码的影响
我对其实施的设想如下
func flip<T>(_ function: @escaping (T) -> () -> Void) -> (T) -> Void {
return { object in function(object)() }
}
只需在
$0
上调用该方法即可:
views.forEach {
$0.removeFromSuperview()
}
(如果愿意,您可以命名参数。)
但您也可以将其包装成一个方法:
extension Sequence {
func onEach(_ invoke: (Iterator.Element) -> () -> Void) {
self.forEach { invoke($0)() }
}
}
这是因为它返回一个具有“顶级”签名的函数
这里的一个缺点是,您不能包含
forEach
上的rethrows
注释,因为rethrows
仅在函数参数本身抛出时适用。对于调用
的类型,您不需要额外的->Void
,对吗?为什么不干脆(Iterator.Element)->()
并将其称为invoke($0)
?您可以这样做,因为第一个函数的返回类型不是Void,而是另一个函数。调用invoke
只会生成该函数;“那么你还需要调用它。@康纳读了乔希在本文底部链接到的文章answer@Connor:这里是。未来读者注意:passed,它在实现时将把实例方法从像(instance)->(Arg1,Arg2,…)->ReturnType
那样的curry更改为(instance,Arg1,Arg2,…)->ReturnType
,类似于Python中传递self
的方式。实施此更改后,array.forEach(Class.instanceMethod)
将成为可能,因为instanceMethod
不接受与以下内容相关的参数(除了隐式self
参数):
extension Sequence {
func onEach(_ invoke: (Iterator.Element) -> () -> Void) {
self.forEach { invoke($0)() }
}
}