2016-11-10 9 views
0
迅速

には添字のメンバーは、私がデータタイプ「(文字列、ANYOBJECT)」は

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

を取得するには、このラインを使用していないのですがあると私はので、私は、このコード

let filteredSubitems = productDict.filter{ 
     $0["groupid"] as!String != "1" 
    } 
を使用していた辞書からのデータをフィルタリングします

私がタイプ '(文字列、ANYOBJECT)' は添字メンバー

iは変換する必要がありませんしたエラー与えている[文字列:ANYOBJECT] [:文字列文字列]に? 何をすればいいですか?

+7

'[文字列:AnyObject]'これは辞書を意味します...配列ではなく、辞書には添え字メンバーがありません –

+1

フィルタ、マップ、縮小は配列、集合(一般に列挙できるデータ構造)で使用されます。したがって、エラー。 – iamyogish

+1

@KrutarthPatel 'groupId'の値が文字列でない場合に注意してください。強制アンラッピングを使用しない – alexburtnik

答えて

2

おそらく、productDictの代わりにarrProductCardの配列をフィルタリングしたいと思うかもしれませんが、意味がありません。試してみてください:

可能な限り、アンラッピングを強制しないでください。ディクショナリにgroupid値がない場合、または文字列でない場合、フィルタクロージャ内のコードがクラッシュすることに注意してください。

編集:

あなたには、いくつかの理由でNSMutableArrayを使用している場合は、あなただけの述語でそれをフィルタリングすることができます。

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

しかし、私は強くスウィフトネイティブコレクションを使用することをお勧めします。

+0

良い説明のための感謝 –

+0

1つの質問。データはフィルタリングされますが、arrProductCardのデータはまだそこにあります。除去できません/ –

+1

結果を同じ変数に設定するだけです: 'arrProductCard = arrProductCard.filter {...}' – alexburtnik

関連する問題