2017-12-21 19 views
0

私の検索バーでより良い結果をフィルタリングしたい。複数の単語、iOS、Swiftのフィルタ検索

私は私の配列が含まれています:

[["object": "Ball", "color": "Red"], ["object": "Ball", "color": "Blue"], ["object": "Square", "color": "Red"]] 

私はそれだけでオブジェクトを表示したい、私はボールを検索する場合、すべてのボールが表示されますが、私はレッド(ボール赤)を追加するとき、それはまた、正方形を示しボールとレッドの両方の単語が含まれていて、ボールまたはレッドという単語の1つだけを含むものは表示されません。これはできますか?

以下は私のコードです。

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { 


     let splitText = searchText.split(separator: " ") 
     filteredVehicles = posts.filter { 
      if let s = $0["object"] as? String, splitText.index(of: Substring(s)) != nil { 
       return true 
      } 
      if let s = $0["color"] as? String, splitText.index(of: Substring(s)) != nil { 
       return true 
      } 
      return false 
     } 
} 
+0

あなたの2つの 'if'は" aとbの場合 "を行い、関係がない場合は連続しません。 – Larme

+0

このオブジェクトを試してください.filter {($ 0 ["object"] ?. contains( "Square")?? false)&&($ 0 ["color"]?contains( "Red")?? false)} – adarshaU

答えて

1

を次のようにコードボール " - >"ボールブルー ")。

+0

この@Oxthorにあなたの時間をありがとう。これは私のために完璧に働いた、私は少し追加することでそれを変更する必要がありましたか?文字列 '$ 0 [" color "]は?文字列 'を働かせます。もう一度このことをありがとう。ではごきげんよう –

0

1.更新この

let filter = dict.filter { 

var isPassed = false 

let split = searchText.components(separatedBy: .whitespaces) 

if split.count > 1 { 

    if ($0["object"]!.contains(split[0]) && $0["color"]!.contains(split[1])) || ($0["object"]!.contains(split[1]) && $0["color"]!.contains(split[0])) { 
     isPassed = true 
    } 
} else { 

    if $0["object"]!.contains(split[0]) || $0["color"]!.contains(split[0]) { 
     isPassed = true 
    } 
} 
return isPassed 
} 
0

の変更のようなあなたのフィルタ条件これはあなたも「(ブルーを逆の順序で検索を実現することができます使用

let splitText = searchText.split(separator: " ") 
filteredVehicles = posts.filter { 

    if splitText.count > 1 { 
     return ($0["color"]?.contains(splitText[0]))! && ($0["object"]?.contains(splitText[1]))! 
    } else if splitText.count == 1 { 
     return ($0["object"]?.contains(splitText[0]))! 
    } 
    return false 
} 
+0

ありがとうこれにあなたの時間のために私はOxthorsの答えでこれを働かせることができましたが、もう一度あなたの時間に感謝します –

関連する問題