对Swift中的Closure参数感到困惑

时间:2016-11-22 14:35:08

标签: ios swift

抱歉新手问题,但我真的不明白

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if searchText.characters.count == 0{
        searchActive = false
        tableView.reloadData()
        return
    }

    searchActive = true
    filteredTableData = tableData.filter({( spaTown: String) -> Bool in
        let rangeTupple = (spaTown.startIndex, spaTown.endIndex)
        let spaRange = Range(uncheckedBounds: rangeTupple)
        let stringMatch = spaTown.range(of: searchText, options: String.CompareOptions.caseInsensitive, range: spaRange, locale: NSLocale.autoupdatingCurrent)
        return stringMatch != nil
    })

    tableView.reloadData()

}

我不理解的部分是

filteredTableData = tableData.filter({( spaTown: String) -> Bool in

我不明白该函数如何知道spaTown字符串是我想要搜索的字符串?是不是一些随意的参数名称?

让我很困惑..

1 个答案:

答案 0 :(得分:1)

系统知道它期望作为filter的参数的闭包的类型 - 它期望(Element)->Bool其中Element是数组元素的类型。

当您的代码显示{( spaTown: String) -> Bool in时,您正在定义要传递给它的闭包。您可以为String变量使用任何您喜欢的名称 - 您选择 spaTown 。这与函数的参数完全相同:func f(spaTown:String)->Bool { ... }只要 types 匹配,编译器就会很高兴。