2016-11-11 2 views
0

JSONデータを表示するテーブルの検索バーを取得しようとしています。ここに私の検索バー機能は次のとおりです。テーブル検索機能が正しく動作するようにするには?

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() 

、ここでは

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

データを保存するために、私の宣言された変数である私は、エラーを引っ張っています:

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 – infernouk

+0

あなたはそこにそれを設定していますが、どこに宣言されていますか?問題はこの間の型の不一致に関連しているようです'filtered'の出力が返されるので、 'filtered'変数の型を知るのに役立ちます。 – ganzogo

答えて

0

ため

感謝その変数が現在どのように宣言されているか。

+0

変数がvarフィルタリングされた:[文字列] = []、私は文字列からあなたの記載された型に変更した場合、文字列のデータ型を必要とする関数の緩やかな部分をlet tmp:NSString = text and let range = tmp.rangeOfString(searchText 、オプション:NSStringCompareOptions.CaseInsensitiveSea rch)。 arrRes変数を何らかの代わりに文字列の辞書にするのが良いルートだと思いますか? – infernouk

+0

これはあなたがしようとしていることとその 'arrRes'変数に含まれるものに依存します。 – ganzogo

+0

どのように私はそれを働くことについて行くだろうか?私はフィルターのarrResをフィルタリングすることはできませんが一致しない限り、それらが一致すると、彼らは文字列の型arent、彼らはNSObjectです:AnyObject、それは私のSearchBar関数を破るように見えると私はセル行のラベルとして使用することはできませんいずれか! – infernouk

関連する問題