类型'(String,AnyObject)'在swift中没有下标成员

Posted

技术标签:

【中文标题】类型\'(String,AnyObject)\'在swift中没有下标成员【英文标题】:Type '(String, AnyObject)' has no subscript members in swift类型'(String,AnyObject)'在swift中没有下标成员 【发布时间】:2016-11-10 12:22:01 【问题描述】:

我正在使用这条线来获取数据

 let productDict  = arrProductCart[sender.tag] as! [String: AnyObject]

我想从字典中过滤数据,所以我正在使用这个代码

let filteredSubitems = productDict.filter
        $0["groupid"] as!String != "1"
    

它给了我错误Type '(String, AnyObject)' has no subscript members

我需要将 [String: AnyObject] 转换为 [String: String] 吗? 怎么办。

【问题讨论】:

[String: AnyObject] 这意味着字典...不是数组并且字典没有下标成员 Filter、Map、Reduce用于Array、Set(一般是可以枚举的数据结构)。因此出现错误。 @KrutarthPatel 注意groupId 值不是字符串的情况。不要使用强制展开 【参考方案1】:

您很可能想要过滤 arrProductCard 数组而不是 productDict,这没有意义。试试这个:

let filteredProducts = arrProductCard.filter
    guard let groupId = $0["groupid"] as? String else  return false 
    return groupId != "1"

您应该尽可能避免强制解包。请注意,如果字典中没有 groupid 值或者它不是字符串,则过滤器闭包中的代码将崩溃。

编辑:

如果您出于某种原因使用NSMutableArray,则可以使用谓词对其进行过滤:

let mutableArray = NSMutableArray(array: [["groupid": "1"], ["groupid": "2"]])    
let groupIdPredicate = NSPredicate(format: "groupid != %@", "1")
mutableArray.filter(using: groupIdPredicate)

但是,我强烈建议使用 Swift 原生集合。

【讨论】:

感谢您的精彩解释 一个问题。数据被过滤了。但是在 arrProductCard 中的数据仍然存在。它不能被删除/ 只需将结果设置在同一个变量中:arrProductCard = arrProductCard.filter ... 我使用 nsmutuablearray 所以出现错误无法将类型“[Element]”的值分配给类型“NSMutableArray” @KrutarthPatel 我不知道您为什么将“groupid”键更改为“NewGroupID”

以上是关于类型'(String,AnyObject)'在swift中没有下标成员的主要内容,如果未能解决你的问题,请参考以下文章

类型'(String,AnyObject)'在swift中没有下标成员

类型“AnyObject”不符合协议“NSFetchRequestResult”

找不到接受类型参数列表的 XCTAssertEqual 的重载 ([String : AnyObject], [String : AnyObject])

类型'[String,AnyObject?]'不符合协议AnyObject?:为什么?

如何在 Swift 中将键值对添加到类型为 [String:AnyObject] 的字典中?

无法将 '[String : AnyObject]?.Type' 类型(又名 'Optional<Dictionary<String, AnyObject>>.Type)的值转