#ios #swift #uitextfield #searchbar
#iOS #swift #uitextfield #панель поиска
Вопрос:
Я пытаюсь использовать текстовое поле в качестве строки поиска для моего табличного представления. Итак, я добавил приведенный ниже код. Теперь он показывает некоторую ошибку, например
Cannot assign value of type 'Array<Dictionary<String, String>>' to type '[MyVC.Objects]'
var objectArray = [Objects]()
var SearchedobjectArray = [Objects]()
override func viewDidLoad() {
super.viewDidLoad()
SearchedobjectArray = objectArray
}
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
{
if string.isEmpty
{
search = String(search.characters.dropLast())
}
else
{
search=textField.text! string
}
print(search)
let predicate=NSPredicate(format: "SELF.name CONTAINS[cd] %@", search)
let arr=(objectArray as NSArray).filtered(using: predicate)
if arr.count > 0
{
SearchedobjectArray.removeAll(keepingCapacity: true)
SearchedobjectArray = arr as! Array<Dictionary<String,String>>
}
else
{
SearchedobjectArray=objectArray
}
looTable.reloadData()
return true
}
Ошибка здесь :
SearchedobjectArray = arr as! Array<Dictionary<String,String>>
Я знаю это, я не использую как Array<Dictionary<String,String>
. Но вот как я могу добавить как мой onject, я не уверен.
Любая помощь по этому поводу?
Комментарии:
1. Я не уверен, что за странное приведение вы пытаетесь, но то, что вы пытаетесь сделать, может быть реализовано с помощью
SearchedobjectArray = objectArray.filter { $0.name.range(of: search, options: [.diacriticInsensitive, .caseInsensitive]) != nil }
. Нет необходимости вNSPredicate
,NSArray
или if-else.2. но мой
objectArray
содержит только looName, id… Поэтому, если ввести любое имя, содержащее looName..it необходимо отобразить в табличном виде
Ответ №1:
Быстрое исправление:
SearchedobjectArray = arr as! [Objects]
Ваш массив не состоит из словарей.
Реальное исправление:
Забудьте NSArray
и NSPredicate
и используйте фильтрацию swift:
SearchedobjectArray = objectArray.filter {
$0.name.range(of: search, options: [.diacriticInsensitive, .caseInsensitive]) != nil
}
if SearchedobjectArray.isEmpty {
SearchedobjectArray = objectArray
}