iOS Как оптимизировать запросы для базы данных Parse Swift 4 - PullRequest
0 голосов
/ 02 октября 2018

У меня есть одна проблема, если короче у меня есть модуль поиска, который подключен к серверу разбора.

И в этой базе данных у меня есть более 50 таблиц данных , в которых я храню некоторыеданные и для поиска я использую этот код:

 func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    searchBar.resignFirstResponder()
    searchResult.removeAll(keepingCapacity: false)
    answer.removeAll(keepingCapacity: false)
    tableView.reloadData()

    let firstQuery = PFQuery(className: "table1")
    firstQuery.whereKey("question", contains: searchBar.text)

    let seccondQuery = PFQuery(className: "table2")
    seccondQuery.whereKey("question", contains: searchBar.text)

    let query3 = PFQuery(className: "table3")
    query3.whereKey("question", contains: searchBar.text)

    let query4 = PFQuery(className: "table4")
    query4.whereKey("question", contains: searchBar.text)

    let queryArry = [firstQuery, seccondQuery, query3, query4]
    for query in queryArry {
        query.findObjectsInBackground { (result, error) in
            if let objects = result {
                for object in objects {
                    let question = object.object(forKey: "question") as! String
                    let answer = object.object(forKey: "answer1") as! String
                    self.answer.append(answer)
                    self.searchResult.append(question)

                }

                DispatchQueue.main.async {
                    self.tableView.reloadData()
                    self.resignFirstResponder()
                }
            }
        }

    }


}

Как вы можете видеть, у меня есть 4 запроса, и некоторые, как я хочу улучшить это, потому что каждый раз, когда я не хочу копировать эту часть кода:

let firstQuery = PFQuery(className: "table1")
firstQuery.whereKey("question", contains: searchBar.text)

Может быть, есть возможность улучшить?

1 Ответ

0 голосов
/ 02 октября 2018

Если вы не хотите копировать эту часть кода

let firstQuery = PFQuery(className: "table1")
firstQuery.whereKey("question", contains: searchBar.text)

Вы можете сделать что-то вроде:

let query1 = PFQuery(className: "table1")
let query2 = PFQuery(className: "table2")
let query3 = PFQuery(className: "table3")
let query4 = PFQuery(className: "table4")
let queries = [query1, query2, query3, query4]

queries.forEach { $0.whereKey("question", contains: searchBar.text) }
queries.forEach { (query) in
    query.findObjectsInBackground()
}

Код выглядитболее компактный

Надеюсь, мой ответ был полезен ?

...