2016-11-10 76 views
0

没有下会员我使用这条线来获得数据类型“(字符串,AnyObject)”在迅速

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

,我想过滤来自词典数据,所以我用这个代码

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

它给我错误类型 '(字符串,AnyObject)' 已经没有下成员

我是否需要转换[字符串:AnyObject]至[字符串:字符串]? 做什么。

+7

'[String:AnyObject]'这意味着字典...不是数组和字典没有下标成员 –

+1

Array,Set(通常可以枚举的数据结构)使用Filter,Map,Reduce。因此错误。 – iamyogish

+1

@KrutarthPatel当'groupId'的值不是一个字符串时要小心这些情况。不要用强制解包 – alexburtnik

回答

2

最有可能你想过滤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) 

不过,我会强烈建议使用斯威夫特本地集合。

+0

感谢您的好解释 –

+0

一个问题。数据被过滤。但在arrProductCard数据仍然存在。它不会被删除/ –

+1

只需将结果设置为相同的变量:'arrProductCard = arrProductCard.filter {...}' – alexburtnik