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字符串是我想要搜索的字符串?是不是一些随意的参数名称?
让我很困惑..
答案 0 :(得分:1)
系统知道它期望作为filter
的参数的闭包的类型 - 它期望(Element)->Bool
其中Element
是数组元素的类型。
当您的代码显示{( spaTown: String) -> Bool in
时,您正在定义要传递给它的闭包。您可以为String变量使用任何您喜欢的名称 - 您选择 spaTown 。这与函数的参数完全相同:func f(spaTown:String)->Bool { ... }
只要 types 匹配,编译器就会很高兴。