Невозможно присвоить значение типа 'Array <Dictionary <String, String >>' для типа '[MyVC.Objects]' - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь использовать текстовое поле в качестве панели поиска для моего представления таблицы. Поэтому я добавил код ниже. Теперь он показывает какую-то ошибку вроде

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>. Но вот как я могу добавить, как мой объект, я не уверен.

Любая помощь по этому поводу?

1 Ответ

0 голосов
/ 04 апреля 2019

Быстрое исправление:

SearchedobjectArray = arr as! [Objects]

Ваш массив не состоит из словарей.

Реальное исправление:

Забудьте NSArray и NSPredicate и используйте быструю фильтрацию:

SearchedobjectArray = objectArray.filter {
    $0.name.range(of: search, options: [.diacriticInsensitive, .caseInsensitive]) != nil
}

if SearchedobjectArray.isEmpty {
    SearchedobjectArray = objectArray
}
...