将函数传递给数组过滤器函数错误 - Swift 4

时间:2018-03-14 08:38:38

标签: arrays swift filter swift4

我试图扩展 数组类编写一个简单的函数,该函数将接收函数作为参数,并将使用它来过滤当前数组。< / p>

在这个例子中&#34; self&#34;实际上是一个数组。

这是我到目前为止所使用的:

    func applyFilter(filterFunction: (String) -> Bool) {
    self.filter(filterFunction)
    }

但我从xCode收到此错误:

cannot convert value of type '(String) -> BOOL' to expected argument type '_ ' -> Bool

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

错误消息表示通用Array.filter(_:)函数期望Array.Element不是字符串传递。

如果您将扩展名和功能更改为:

extension Array where Element == String {

    func applyFilter(_ filter: (String) -> Bool) {
        self.filter(filter)
    }

}

由于这指定该函数只处理String元素,因此您可以将函数传递给闭包:

func filter(_ value: String) -> Bool { 
    /* Filter how you need */ 
}

["Hello", "World"].applyFilter(filter(_:))