在 SwiftUI 中过滤数组

Posted

技术标签:

【中文标题】在 SwiftUI 中过滤数组【英文标题】:Filtering an array in SwiftUI 【发布时间】:2021-05-13 09:22:25 【问题描述】:

我正在尝试在 SwiftUI 中实现一个搜索栏,并且我想在用户在其上写入文本时过滤一个数组。

很遗憾,它不起作用,我不知道为什么。

代码如下:

import SwiftUI

struct ContentView: View 
    @ObservedObject var jobsViewModel = JobsviewModel()
    @State private var isEditing = false
    @Binding var searchText: String
    var body: some View 
       List 
            ForEach(jobsViewModel.jobs.filter 
                searchText.isEmpty ? true : $0.title.localizedCaseInsensitiveContains(searchText)
            , id: \.self) 
                JobView(job: $0)
            
        
        .onAppear 
            jobsViewModel.fetchJobs()
        
   

我尝试在包含searchText.isEmpty ? true : $0.title.localizedCaseInsensitiveContains(searchText) 的行中设置断点,但应用程序永远不会停在那里。

提前致谢!

【问题讨论】:

你为什么要重新发明***? 桥接 UISearchBar(Controller) 到 SwiftUI 非常容易。 【参考方案1】:

我对 searchText 属性使用了@State 而不是 @Binding,并且过滤按预期工作。

@State private var isEditing = false
@State var searchText: String = ""
var body: some View 
    VStack 
        HStack 
            ...

【讨论】:

该列表完美运行并且可见。当文本在栏中更改时它不会改变 你是对的,那部分一定是我的预览有问题。但是通过使用@State,视图对我来说很好,所以如果该更改对您不起作用,那么问题一定与您的视图模型有关,因为我使用的是硬编码数组而不是它。【参考方案2】:

用@State 替换@Binding 有效!

【讨论】:

以上是关于在 SwiftUI 中过滤数组的主要内容,如果未能解决你的问题,请参考以下文章

过滤 Firebase 数据 SwiftUI

过滤和映射数组时的SwiftUI EXC_BAD_INSTRUCTION

如何在 SwiftUI 中计算数组的总计、小计和平均值

SwiftUI Core Data - NSPredicate 动态过滤字符串数组属性包含给定字符串的位置

SwiftUI - 如果在 ForEach 循环内

SwiftUI - 动态分段选取器过滤器