【问题标题】:Cannot assign value of type 'Array<Dictionary<String, String>>' to type '[MyVC.Objects]'无法将类型“Array<Dictionary<String, String>>”的值分配给类型“[MyVC.Objects]”
【发布时间】:2019-04-04 10:21:18
【问题描述】:

我正在尝试使用文本字段作为表格视图的搜索栏。所以我添加了下面的代码。现在它显示一些错误,如

Cannot assign value of type 'Array&lt;Dictionary&lt;String, String&gt;&gt;' 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&lt;Dictionary&lt;String,String&gt;&gt;我知道,我不用作Array&lt;Dictionary&lt;String,String&gt;。但在这里我怎么能像我的项目一样追加我不确定。

有什么帮助吗?

【问题讨论】:

  • 我不确定你在尝试什么奇怪的演员阵容,但你想要做的事情可以使用SearchedobjectArray = objectArray.filter { $0.name.range(of: search, options: [.diacriticInsensitive, .caseInsensitive]) != nil } 来实现。不需要NSPredicateNSArray 或 if-else。
  • 但是我的objectArray 包含 looName,只有 id...所以如果输入任何名称包含 looName..它必须显示在表格视图中

标签: ios swift uitextfield searchbar


【解决方案1】:

快速修复:

SearchedobjectArray = arr as! [Objects]

您的数组不是由字典组成的。

真正的修复:

忘记NSArrayNSPredicate 并使用快速过滤:

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

if SearchedobjectArray.isEmpty {
    SearchedobjectArray = objectArray
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多