新手问题不好意思,我真的不懂
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 字符串是我希望搜索的字符串?这不是一些任意的参数名称吗?
这让我很困惑..
最佳答案
系统知道它期望作为 filter
参数的闭包类型 - 它期望 (Element)->Bool
其中 Element
是数组元素的类型。
当您的代码显示 {( spaTown: String) -> Bool in
时,您正在定义传递给它的闭包。您可以为 String 变量使用您喜欢的任何名称 - 您选择了 spaTown。这与函数的参数非常相似:func f(spaTown:String)->Bool { ... }
只要类型匹配,编译器就会满意.
关于ios - 对 Swift 中的闭包参数感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40744604/