2016-11-11 2 views
0

JSON 데이터를 보여주는 내 테이블에서 검색 막대를 사용하려고합니다. 내 선언 된 변수가 나는 오류를 잡아 당겨하고테이블 검색 기능이 올바르게 작동합니까?

var arrRes: [[NSObject: AnyObject]] = [] 

데이터를 저장하기 위해 여기에

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 
    filtered = arrRes.filter({ (text) -> Bool in 
     let tmp: NSString = text 
     let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch) 
     return range.location != NSNotFound 
    }) 
    if(filtered.count == 0){ 
     searchActive = false; 
    } else { 
     searchActive = true; 
    } 
    self.exercisesTableView.reloadData() 

과 : 여기 내 검색 창 기능입니다

Cannot invoke 'filter' with an argument list of type '(([NSObject : AnyObject]) throws -> Bool) Expected an argument list of type '((Dictionary) throws -> Bool)''

임 확인이하는 것입니다 arrRes 변수 및 해당 데이터 유형에 액세스 할 수 있지만이를 해결하는 방법은 확실하지 않습니다.

var filtered: [[NSObject: AnyObject]] = [] 

을 ...하지만 모르게 확실히 알고 어렵습니다 : 나는 당신이 너무 좋아, arrRes에 맞게 filtered 당신의 선언을 업데이트 할 필요가 있다고 생각

+0

'filtered'변수는 어떻게 선언됩니까? – ganzogo

+0

OP의 코드에서 : filtered = arrRes.filter ({(text) -> Bool in – infernouk

+0

당신은 거기에 그것을 설정하고 있는데 어디에서 선언 했습니까?이 문제는이 사이의 형식이 일치하지 않는 것 같습니다 와'filter'의 출력을 비교해 보면'filtered' 변수의 타입을 알 수 있습니다. – ganzogo

답변

0

어떤 통찰력에 대한

감사합니다 그 변수가 현재 선언 된 방법.

+0

변수는 현재 var로 선언되었습니다. 필터링 된 : [문자열] = [], 그러나 내가 문자열에서 귀하의 명시된 유형으로 변경하면 내가 let tmp와 같은 문자열 데이터 형식을 필요로하는 함수의 느슨한 부분 : NSString = text and let range = tmp.rangeOfString (searchText , 옵션 : NSStringCompareOptions.CaseInsensitiveSea rch). arrRes 변수를 대신 문자열 대신 사전으로 만드는 것이 더 나은 방법이라고 생각합니까? – infernouk

+0

그것은 당신이하려는 일과'arrRes' 변수가 포함하는 것에 달려 있습니다. – ganzogo

+0

어떻게 해결할 수 있습니까? 나는 그것들이 일치하지 않는 한 filter arrRes를 여과 할 수 없다. 그러나 그것들을 일치 시키면 그들은 String 형이 아니다. 그것들은 NSObject이다 : AnyObject, 내 SearchBar 함수를 깨뜨릴 것 같아서 그것들을 셀 열의 레이블로 사용할 수 없다. 어느 한 쪽! – infernouk