【问题标题】:Can anyone tell me why my filtered array is empty?谁能告诉我为什么我的过滤数组是空的?
【发布时间】:2017-07-07 16:34:09
【问题描述】:

我添加了一个表格视图和一个搜索栏(以编程方式)。我想显示过滤后的结果,所以我创建了一个数组(称为:todoTitle),其中包含我的 todo 活动的标题(我有一个单独的对象,它的属性之一是标题)。我使用 updateSearchResults 方法,并在其中使用过滤器方法返回正确的待办事项。为了检查数组是否为空,我在该函数内部编写代码来打印每个数组内部的待办事项。这是我在 updateSearchResults(for:) 函数中的代码

    //filtering through todos' titles
    filteredTodos = self.todosTitle.filter({ (title: String) -> Bool in
        if title.lowercased().contains((self.searchController.searchBar.text?.lowercased())!) {
            return true
        } else {
            print ("S \(todosTitle)")
            print ("t \(title)")
            print (filteredTodos)

            return false

        }
    })
    //updating the results TableView
    self.resultsController.tableView.reloadData()

}

``

tod​​osTitle 数组不是空的,所以我不明白为什么我的 filtersTodos 是空的。有谁知道为什么会发生这种情况?

【问题讨论】:

  • 打印结果数组filteredTodos在闭包内没有多大意义。
  • 你应该打印 self.searchController.searchBar.text 吗?安慰和检查。它会阻塞,这可能是原因。
  • filteredTodos 在过滤器返回之前不会被设置为过滤器的结果。只是为了清楚
  • 为什么self.searchController.searchBar.text?.lowercased()()包围?这是不必要的,使它看起来像一个元组。
  • @adev 当第二个表视图应该显示搜索结果时出现问题(错误:意外发现 nil)。这样做是因为它的行数和每个单元格的内容是基于为空的 filtersTodos 数组的内容。我试过打印 self.searchController.searchBar.text?在 else 子句中进行控制台并打印字母,直到我按下活动标题内的字母。在这种情况下,它会抛出一个关于 nil 的错误。

标签: swift uitableview swift3 uisearchbar searchbar


【解决方案1】:

您只需要检查待办事项标题是否包含搜索文本。这是一个简化的示例,我使用字符串数组和搜索文本字符串进行了测试。也许将您的搜索文本分配分开,以确保您从 searchBar.text 获得您期望的字符串

let todosTitle = ["One", "Two", "Three"]
let searchText = "t"

//filtering through todos' titles
let filteredTodos = todosTitle.filter({ (title: String) -> Bool in
    return title.lowercased().contains(searchText.lowercased())
})

print(filteredTodos)  //["Two", "Three"]

【讨论】:

  • 我也是这样做的,但是我没有使用一些文字字符串,而是使用了 searchBar 中的文本。我检查了一下,在上面的方法中,我的 todosTitle 数组不是空的,所以我添加一些值的代码的其他部分就可以了(我认为是这样)。问题是,我不明白为什么 filter 方法看不到我的 todosTitle 数组不是空的(同样,上面方法中的 print() 函数打印数组包含的所有对象)。
  • 即使我从闭包中打印“title”属性,它也会打印 todosTitle 数组中的所有项目,因此它不为空。
  • 闭包完成后才会分配过滤后的数组。
猜你喜欢
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-16
  • 2021-04-16
  • 2013-05-29
  • 1970-01-01
  • 2016-04-25
  • 2015-03-22
相关资源
最近更新 更多