2017-12-21 3 views
0

검색 창에서 검색 결과를 더 잘 필터링하고 싶습니다.여러 단어로 된 검색, iOS, Swift

내가 가진 내 배열이 포함

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

내가 볼을 검색 할 때 모든 공 나타납니다,하지만 난 레드 (볼 적색) 다음 또한 사각형을 보여줍니다 추가 할 때, 난 단지 객체를 보여주기 위해 원하는 볼과 레드라는 단어가 모두 포함 된 단어는 볼이나 레드라는 단어 중 하나만 포함하는 단어를 모두 표시하지 않습니다. 이 일을 할 수 있습니까?

아래 코드는 제 코드입니다.

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

두 개의'if'는 "if a and b"를하고, 관계가없는 경우 연속하지 않습니다. – Larme

+0

이 오브젝트를 사용해보십시오 .filter {($ 0 [ "object"] ?. contains ("Square") ?? false) && ($ 0 [ "color"]? contains ("Red") ?? false)} – adarshaU

답변

1

를 다음 코드 볼 "->"볼 블루 ").

+0

감사합니다. @Oxthor. 이것은 나를 위해 완벽하게 작동했습니다, 나는 약간 추가로 변경해야만 했나요? 문자열'$ 0 [ "color"]? String'을 사용합니다. 다시 한번 감사드립니다. 모두 제일 좋다 –

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 대답과 함께 일할 수 있었지만, 다시 한번 감사합니다. –