Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:在字典数组上使用过滤函数?错误:无法调用';过滤器';具有类型为的参数列表_Ios_Arrays_Swift - Fatal编程技术网

Ios Swift:在字典数组上使用过滤函数?错误:无法调用';过滤器';具有类型为的参数列表

Ios Swift:在字典数组上使用过滤函数?错误:无法调用';过滤器';具有类型为的参数列表,ios,arrays,swift,Ios,Arrays,Swift,下面这段代码的目标是筛选出具有特定ID的字典,其中ID是一个字符串 let dictArray = networkData["dicts"] as! [[String:AnyObject]] localData["dicts"] = dictArray.filter{ ($0["id"] as! String) != sample.getId() } 但是,此代码会生成一个错误: 无法使用类型为“”的参数列表调用“筛选器”([String: AnyObject])抛出->Boo

下面这段代码的目标是筛选出具有特定ID的字典,其中ID是一个字符串

    let dictArray = networkData["dicts"] as! [[String:AnyObject]]
    localData["dicts"] = dictArray.filter{ ($0["id"] as! String) != sample.getId() }
但是,此代码会生成一个错误:

无法使用类型为“”的参数列表调用“筛选器”([String: AnyObject])抛出->Bool)'

根据和等其他SO答案,似乎错误在于字典不符合
equalable

因此,使用
filter
创建自定义类以保存字典数组并使该类符合
equalable
的唯一选项是什么


如果是这样的话,简单地迭代并创建一个新数组似乎更干净。

问题不在于哈希对象不符合
equalable
,因为您使用
String
进行比较

我的代码在操场上运行良好:

// make sure data is type of [String: [[String: AnyObject]]]
// make sure filteredData is type of [String: [[String: AnyObject]]]

let key = "hashes"
if let hashArray = data[key] {
    let id = sample.getId() // make sure it's String type
    filteredData[key] = hashArray.filter { ($0["id"] as? String) != id }
}

问题不在于哈希对象不符合
equalable
,因为您正在使用
String
进行比较

我的代码在操场上运行良好:

// make sure data is type of [String: [[String: AnyObject]]]
// make sure filteredData is type of [String: [[String: AnyObject]]]

let key = "hashes"
if let hashArray = data[key] {
    let id = sample.getId() // make sure it's String type
    filteredData[key] = hashArray.filter { ($0["id"] as? String) != id }
}

过滤[[String:AnyObject]](又称数组>)会产生另一个[[String:AnyObject]]。您试图将其分配给类型为
AnyObject
的变量,这在Swift 3中是不允许的,因为数组是结构,而不是对象

创建一个类型安全的结构或对象来保存此数据,而不是dict

例如:

let dictArray = networkData["dicts"] as! [[String:AnyObject]]
let filteredDicts = dictArray.filter{ ($0["id"] as! String) != sample.getId() }         
localData["dicts"] = filteredDicts

过滤[[String:AnyObject]](又称数组>)会产生另一个[[String:AnyObject]]。您试图将其分配给类型为
AnyObject
的变量,这在Swift 3中是不允许的,因为数组是结构,而不是对象

创建一个类型安全的结构或对象来保存此数据,而不是dict

例如:

let dictArray = networkData["dicts"] as! [[String:AnyObject]]
let filteredDicts = dictArray.filter{ ($0["id"] as! String) != sample.getId() }         
localData["dicts"] = filteredDicts


什么是散列对象?请确保您定义了
filteredData:[String:[[String:AnyObject]]]
@Alexander他可能是指dictionaries@matt这正是我所怀疑的,但他并没有比较字典的相等性,我建议declare
let id=sample.getId()
从筛选器块中删除,并使用id而不是。什么是哈希对象?请确保您定义了
筛选器数据:[String:[[String:AnyObject]]]
@Alexander他可能是指dictionaries@matt这就是我所怀疑的,但他并没有在任何地方比较字典的相等性,我建议从过滤器块中声明
let id=sample.getId()
,并使用id代替。谢谢!但准确地说,我们将字典数组分配给类型为
AnyObject
(在swift中也不起作用)的变量。@Crashalot说得不错。你可以补充我的答案。如果它有助于提高投票率,请接受它。仅未接受,因为仍需要修复代码。:)不要担心,如果这导致了解决方案,您将获得分数。:)顺便说一句,为什么这在swift 2.x中有效,而不是在swift 3.x中有效?SWIFT 2允许对基础类型进行隐式桥接,例如从<代码>数组 > <代码> NSArray < /Cl> >(这是一个类)。在Swift 3中明确了这一桥接,以减少对基础类型的依赖。谢谢!但准确地说,我们将字典数组分配给类型为
AnyObject
(在swift中也不起作用)的变量。@Crashalot说得不错。你可以补充我的答案。如果它有助于提高投票率,请接受它。仅未接受,因为仍需要修复代码。:)不要担心,如果这导致了解决方案,您将获得分数。:)顺便说一句,为什么这在swift 2.x中有效,而不是在swift 3.x中有效?SWIFT 2允许对基础类型进行隐式桥接,例如从<代码>数组 > <代码> NSArray < /Cl> >(这是一个类)。在SWIFT 3中明确了这种桥接,以减少对地基类型的依赖。