【发布时间】:2015-11-29 17:03:10
【问题描述】:
我正在尝试编写 Swifts .filter 函数,但遇到了一些困惑。我实际上是在尝试修改此功能:
func anotherFilter<T>(elements: [T], predicate: (T) -> Bool) -> [T] {
var filteredArray = [T]()
for element in elements {
if predicate(element) {
filteredArray += [element]
}
}
return filteredArray
}
进入扩展:
extension Array {
func anotherFilter<T>(elements: [T], predicate: (T) -> Bool) -> [T] {
var filteredArray = [T]()
for element in elements {
if predicate(element) {
filteredArray += [element]
}
}
return filteredArray
}
}
当然,这个版本的扩展可以工作,但它要求你传递没有意义的对象:
self.coords.anotherFilter (coords) { self.someOperation(coords, op: $0) }
我的尝试
显然,我想要实现的是这样的:
extension Array {
func anotherFilter <T>(predicate: (T) -> Bool) -> [T] {
var filteredArray = [T]()
for item in self {
if predicate(item) {
filteredArray.append(item)
}
}
}
}
但这会返回错误:
无法使用“(元素)”类型的参数列表调用“谓词”
问题
如何在不参数化的情况下将对象(在本例中为坐标)传递到我的扩展中?欢迎提供更深入的解释。
【问题讨论】:
-
@MartinR 谢谢,我去看看。
标签: swift filter extension-methods