как отфильтровать nsdictionary с несколькими ключами в swift? - PullRequest
0 голосов
/ 15 марта 2019
{
    address = "street1";
    country = India;
    state = uttarpradesh;
}
{
    address = "street2";
    country = US;
    state = New York;
}

это мой словарь

Я использую панель поиска для фильтра

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

     // Put your key in predicate that is "Name"


    let filteredArray = MyDict.filter { ($0["address"] as! String).range(of: searchText!,  ($0["country"] as! String).range(of: searchText!, ($0["state"] as! String).range(of: searchText!, options: [.diacriticInsensitive, .caseInsensitive]) != nil }

    print ("array = \(filteredArray)")

    if(filteredArray.count == 0){
        searchActive = false;
    } else {
        searchActive = true;
    }
    self.TableView.reloadData()
}

Ответы [ 2 ]

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

Предположим, что в вашем примере MyDict - это массив NSDictionary:

let filteredArray = MyDict.filter {
    for key in $0.allKeys {
        if let string = $0[key] as? String,
            string.contains(searchText) {
            return true 
        }
    }
    return false
}
searchActive = filteredArray.count > 0

Кроме того, вам может быть полезно ознакомиться с основами Swift Guidelines

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

Вместо этого

let filteredArray = MyDict.filter { ($0["address"] as! String).range(of: searchText!,  ($0["country"] as! String).range(of: searchText!, ($0["state"] as! String).range(of: searchText!, options: [.diacriticInsensitive, .caseInsensitive]) != nil }

Используйте &&, чтобы требовать, чтобы два выражения bool были истинными, или ||, чтобы сделать выражение истинным, если любое из них истинно.

Итак, чтобы проверить, есть ли в адресе ИЛИ (||) округ, текст, используйте

let filteredArray = MyDict.filter { 
   ($0["address"] as! String).range(of: searchText!) != nil ||  
   ($0["country"] as! String).range(of: searchText!) != nil 
}

Вы можете добавить больше проверок с помощью || и подвыражений

Однако из словаря, который вы показали, мне не ясно, что Страна - это Строка. Вам нужно преобразовать любое название страны в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...