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

필터, 맵, 축소가 배열, 집합 (일반적으로 열거 할 수있는 데이터 구조)에 사용됩니다. 따라서 오류. – iamyogish

+1

@KrutarthPatel'groupId' 값이 String이 아닌 경우에주의하십시오. 강제 랩핑을 사용하지 마십시오 – alexburtnik

답변

2

아마도 productDict 대신 arrProductCard 배열을 필터링하고 싶지는 않을 것입니다. 시도해보십시오.

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