在 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 中过滤数组的主要内容,如果未能解决你的问题,请参考以下文章
过滤和映射数组时的SwiftUI EXC_BAD_INSTRUCTION