#swift
#swift
Вопрос:
{
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()
}
Комментарии:
1. Я никогда раньше не видел подобного словаря Swift.
2. Есть ли причина, по которой вы не хотите использовать словарь Swift? Кроме того, избегайте именования вашего var, начинающегося с верхнего регистра. И вы можете, должны сделать «или»:
if let inFactAnArray = MyDict as? [[String: String]] { let filteredArray = inFactAnArray.filter{ $0["address"].range(of...) || $0["country"].range(of:)... || ... } }
ИMyDict
на самом деле является массивом словарей. Неправильное именование вводит в заблуждение.
Ответ №1:
Вместо этого
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 }
Используется amp;amp;
для требования, чтобы два выражения bool были true, или ||
для создания выражения, которое является true, если любое из них является true.
Итак, чтобы проверить, есть ли текст в адресе или ( ||
) округе, используйте
let filteredArray = MyDict.filter {
($0["address"] as! String).range(of: searchText!) != nil ||
($0["country"] as! String).range(of: searchText!) != nil
}
Вы можете добавить больше проверок с большим ||
количеством вложенных выражений
Однако из словаря, который вы показали, мне не ясно, что Country — это строка. Вам нужно будет преобразовать что бы это ни было в название страны в виде строки.
Комментарии:
1. Значение типа кортежа ‘(key: Any, value: Any)’ не имеет элемента ‘subscript’, в нем отображается ошибка
Ответ №2:
Предполагается, что в вашем примере 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