2016-11-10 99 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

相關問題