我不知道如何正确创建第一个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())
           }


寻找一些技巧。最好的祝福。

最佳答案

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

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


如果searchTestArrayOne的任何元素包含在busStop.stopName中,则返回true,否则返回false。一旦找到与闭包匹配的第一个元素,contains(where:)也会提早退出,因此,如果没有匹配项,则仅遍历整个搜索数组。

还请确保您遵守Swift命名约定,即函数名和变量名的lower-camelCase。

10-08 05:39