ios - 对 Swift 中的闭包参数感到困惑

标签 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 字符串是我希望搜索的字符串?这不是一些任意的参数名称吗?

这让我很困惑..

最佳答案

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

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

关于ios - 对 Swift 中的闭包参数感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40744604/

相关文章:

ios - 根据内容更新 UICollectionView 高度

ios - 呈现 SecondViewController 时重复调用 ViewDidAppear

ios - 如何更快地检测到对端断线?

ios - 如何使用蒙版为圆形图像添加边框

json - ARKit 4.0 – 是否可以将 ARWorldMap 数据转换为 JSON 文件?

ios - 添加UIDatePicker后,打印错误

ios - 单击按钮时发送到实例错误的无法识别的选择器

ios - 存档验证错误 : Unsupported Architecture, 段对齐无效等 ~Jitsi Meet

swift avfoundation AVCapturePhotoCaptureDelegate 捕获方法

xcode - 如何在 UITableView 中刷新时清除 NSURL 的缓存