类型'(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)的值转