Функция поиска в SwiftUI для поиска по массиву структур - PullRequest
2 голосов
/ 19 марта 2020

Я хочу реализовать функцию панели поиска в списке ниже, мой текущий код:

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

            List(fetcher.user) { user in

                HStack() {

                    Text(user.name)

                }

            }

        }

, где пользователь объявлен как @Published var user = [User]()

Как мне go о реализации функции поиска? Я видел несколько видео, но их использование намного проще, чем мое, так как я пытаюсь выполнить поиск по массиву структур.

1 Ответ

0 голосов
/ 19 марта 2020

Я бы использовал ObservableObject для выполнения поиска c:

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
    }
}

Это класс, в котором вы можете публиковать sh значения для слушателей, в этом случае это будет Ваш SwiftUI View.

Тогда вы можете использовать это так:

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)
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...