2017-09-13 32 views
0

我想不出如何正確創建第一個return。它會這樣工作,但問題是searchtestarrayone總是有不同的長度,它可能會相當大。幾周前我開始了與Swift的旅程,所以在下面的代碼中可能會有些愚蠢的事情,答案很明顯,請原諒我。通過檢查列表是否包含其他列表的元素進行過濾。怎麼做?

func updateSearchResults(for searchController: UISearchController){ 

    if let searchText = searchController.searchBar.text, !searchText.isEmpty {   
     transformSearchResult() 

     filteredBusStopsArray = busStopsArray.filter { (busstop : BusStop) in 

      if !searchtestarrayone.isEmpty{ 
       return busstop.stopName.lowercased().contains(searchtestarrayone[0]) || busstop.stopName.lowercased().contains(searchtestarrayone[1]) 
      } 
      else{ 
       return busstop.stopName.lowercased().contains(searchText.lowercased()) 
      } 

尋找一些提示。最好的祝福。

+0

「searchtestarrayone」的作用是什麼? – Wukerplank

+0

它是包含字母組合的數組,例如當您在搜索欄中輸入「aa」時,數組將填充「aa」,「aą」,「ąa」,「±」。一般來說,這應該是爲了提高搜索波蘭語詞彙。 – Kickd

回答

0

如果你想返回busstop.stopName是否包含任何searchtestarrayone的值的值,你可以使用contains.where

if !searchtestarrayone.isEmpty{ 
    return searchTestArrayOne.contains(where: {busStop.stopName.lowercased().contains($0)}) 
} 

如果任何searchTestArrayOne元素都包含在busStop.stopName和假否則這將返回true。 contains(where:)只要找到與閉包匹配的第一個元素,它也會提前退出,因此如果沒有匹配,那麼他的全搜索數組只會被迭代。

另請確保您符合Swift命名約定,該約定是函數和變量名稱的lower-camelCase。

0

您應該將busStopsArray映射爲僅包含小寫停止名稱並使用searchtestarrayone進行過濾。

filteredBusStopsArray = (busStopsArray.map { $0.stopName.lowercased() }).filter { 
    searchtestarrayone.contains($0) 
} 
相關問題