谁能告诉我为啥我的过滤数组是空的?

Posted

技术标签:

【中文标题】谁能告诉我为啥我的过滤数组是空的?【英文标题】: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 的错误。 【参考方案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 数组中的所有项目,因此它不为空。 闭包完成后才会分配过滤后的数组。

以上是关于谁能告诉我为啥我的过滤数组是空的?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 ComboBox 是空的,尽管变量已初始化?

java问题:为啥这个list里面的实体类都是空的,但是实体类里面有值,dao层采用mybatis

为啥我的 Eclipse 工作区是空的?

为啥我的相机胶卷模式是空的?

为啥我的 CSRF 令牌在使用 Form::open() 时是空的?

为啥我的 PATCH 请求的响应是空的? (Javascript)