Поиск нескольких структурных массивов с помощью UISearchController Swift 4 - PullRequest
0 голосов
/ 05 марта 2019

У меня есть два массива данных, которые я хотел бы искать, и не знаю, как искать оба с помощью UISearchController

struct Fish {
   var name: String
   var price: Int
}
var fishArray: [Fish] = [   Fish(name: "Bass", price: 1),
                            Fish(name: "Pike", price: 2),
                            Fish(name: "Carp", price: 3),
                            Fish(name: "Bluegill", price: 4),
                            Fish(name: "Catfish", price: 5)]
struct Weapons {
   var name: String
   var price: Int
}
var weaponsArray: [Weapons] = [   Weapons(name: "Sword", price: 1),
                                  Weapons(name: "Knife", price: 2),
                                  Weapons(name: "Gun", price: 3),
                                  Weapons(name: "Poison", price: 4),
                                  Weapons(name: "Hammer", price: 5)]

Поиск происходит здесь.И это прекрасно работает для поиска только Оружия, но как я могу добавить Рыбу и несколько других массивов позже.

func filterContentForSearchText(_ searchText: String, scope: String = "All") {
    filteredData = weaponsArray.filter({( weapon : Weapons) -> Bool in
        return weapon.name.lowercased().contains(searchText.lowercased())
    })

    mainTableView.reloadData()
}

Надеюсь, что это имеет смысл для кого-то!Спасибо!

1 Ответ

0 голосов
/ 05 марта 2019

Если у них всех есть имя и цена, вы можете сделать что-то вроде этого, для последней части вы можете выгружать другой массив и объединять их в один большой массив:

protocol Item {
    var name: String { get set }
    var price: Int { get set }
}

struct Fish: Item {
    var name: String
    var price: Int
}
var fishArray: [Fish] = [   Fish(name: "Bass", price: 1),
                            Fish(name: "Pike", price: 2),
                            Fish(name: "Carp", price: 3),
                            Fish(name: "Bluegill", price: 4),
                            Fish(name: "Catfish", price: 5)]
struct Weapons: Item {
    var name: String
    var price: Int
}
var weaponsArray: [Weapons] = [   Weapons(name: "Sword", price: 1),
                                  Weapons(name: "Knife", price: 2),
                                  Weapons(name: "Gun", price: 3),
                                  Weapons(name: "Poison", price: 4),
                                  Weapons(name: "Hammer", price: 5)]

var items: [Item] = (fishArray as [Item]) + (weaponsArray as [Item])
items.filter { (item) -> Bool in
    return item.name.lowercased().contains("C".lowercased())
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...