【问题标题】:Filtering an array in SwiftUI在 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 非常容易。

标签: ios swift swiftui


【解决方案1】:

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

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

【讨论】:

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

用@State 替换@Binding 有效!

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2022-11-27
    • 2016-03-28
    • 2019-01-18
    相关资源
    最近更新 更多