Вы должны были показать сообщение об ошибке уже в вопросе.Ошибка довольно очевидна.
Значение ключа Search
- это массив , поэтому принудительное приведение as! [String : Any]
к словарю завершается неудачей.
Измените код на
...
var arr = [[String:Any]]()
if let arrSearch = UserDefault["Search"] as? [[String : Any]] {
arr.append(contentsOf: arrSearch)
}
arr.append(dictSearch)
UserDefault["Search"] = arr
...
Отправка в основной поток и предложение else
не требуется.