SwiftUI搜索栏功能可搜索一系列结构

时间:2020-03-19 03:09:43

标签: search swiftui

我想在下面的列表视图中实现搜索栏功能,这是我当前的代码:

Section(header: SearchBar(text: self.$searchQuery)) {

            List(fetcher.user) { user in

                HStack() {

                    Text(user.name)

                }

            }

        }

将用户声明为@Published var user = [User]()

我该如何实施搜索功能?我看过一些视频,但是它们的用例比我的要简单得多,因为我试图通过结构数组进行搜索。

1 个答案:

答案 0 :(得分:0)

我将使用ObservableObject来执行搜索逻辑:

class SearchHandler: ObservableObject {
    var searchText: String = "" {
        didSet {
            search()
        }
    }

    // Your array, replace String with your type
    @Published var resultObjs: [String] = []

    // Your initial array, replace String with your type
    var allObjs: [String]

    init(allObjs: [String]) {
        self.allObjs = allObjs
    }

    func search() {
        // Write all your searching code here

        // Use the searchText variable to filter out object
        // from allObjs and write them into resultObjs
    }
}

这是一个您可以在其中将值发布给侦听器的类,在这种情况下,它将是您的SwiftUI视图。

然后您可以像这样使用它:

struct ContentView: View {
    // Replace the empty array with your initial data
    @ObservedObject var searchHandler = SearchHandler(allObj: [])

    var body: some View {
        Section(header: SearchBar(text: self.$searchHandler.searchText)) {
            List(self.$searchHandler.$resultObj) { user in
                HStack() {
                    Text(user.name)
                }
            }
        }
    }
}