2016-08-01 61 views
1

所以我過濾數據(所有字符串),並希望顯示如下:如何將兩個範圍<Index>添加在一起?

  1. 的搜索詞,其中的第一個字母包含搜索(例如搜索「溴」當我想看到所有。
  2. 搜索詞的字符串包含單詞(例如,當搜索'Br'時顯示包含單詞'br'的所有單詞像'開創者')。

我有他們兩人單獨工作(見let foundlet foundMore),但現在我想合併兩者(第一示出的第一個字母包含搜索的搜索詞,那些地方後該字符串包含該詞)。嘗試使用加號,但它給出了以下錯誤

二元運算符'+'不能應用於兩個'範圍'?操作數

extension SearchResultsController : UISearchResultsUpdating { 
     func updateSearchResultsForSearchController(searchController:  UISearchController) { 
     self.tableView.reloadData() 
     let searchBar = searchController.searchBar 
     let target = searchBar.text! 
     self.filteredData = self.originalData.filter { 
      s in 
      let options = NSStringCompareOptions.AnchoredSearch 
      let found = s.rangeOfString(target, options: options) 

      let optionsMore = NSStringCompareOptions.CaseInsensitiveSearch 
      let foundMore = s.rangeOfString(target, options: optionsMore) 

      let allTogether = found + foundMore 

      return (allTogether != nil) 
     } 
     self.tableView.reloadData() 
    } 
} 

回答

3

範圍不能加在一起,因爲當兩個範圍不相交時結果可能不是合適的範圍。

但是,您不需要添加此項,因爲最終您會將整體範圍與nil進行比較。這意味着,你可以單獨雙方比較nil

return s.rangeOfString(target, options: NSStringCompareOptions.AnchoredSearch) != nil 
    || s.rangeOfString(target, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil 

檢查1和2,應該這樣來查看,而不是兩個

混合那你應該過濾兩次,第二陣列第一個追加:

var filtered1 = self.originalData.filter { s in 
    return s.rangeOfString(target, options: NSStringCompareOptions.AnchoredSearch) != nil 
} 
let filtered2 = self.originalData.filter { s in 
    // Exclude results of the first search 
    return s.rangeOfString(target, options: NSStringCompareOptions.AnchoredSearch) == nil 
&& s.rangeOfString(target, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil 
} 
filtered1 += filtered2 
self.filteredData = filtered1 
+0

嗨,這工作,但它不會過濾我的數據我想要的方式(檢查1和2,他們應該被視爲這樣,而不是兩者的組合)。這就像我想做一個。附加在第一個數組的末尾(如果這使得sence) – SoundShock

+0

@SoundShock這也是可行的 - 請參閱編輯。 – dasblinkenlight

+0

謝謝,這正是我想要的! – SoundShock

0

對於你的情況,你可以用??替代+因此,如果只將範圍是非零它將被設置爲allTogether值。這是最簡單的代碼,但不一定是最明顯的或易於閱讀的。明確的邏輯OR無測試更明顯。

+0

嗨,這的確是我已經探討的一個選項,但在這種情況下,不過濾我的數據我想要的方式(第一顯示第一個字母包含您的搜索的搜索詞(例如,當搜索'Br'時,我希望看到以'Br'開頭的所有單詞,例如Br​​eak,Broke,...) 搜索單詞中包含單詞的詞(例如,當搜索'Br'時顯示所有包含單詞'br'在'開創者'這個詞中)。 – SoundShock

+0

這是因爲過濾和排序是2種不同的東西,你需要先篩選,然後排序 – Wain

0

如果可能的話,可以你可以試試這個:

let indexSet = NSMutableIndexSet() 
indexSet.addIndexesInRange(NSMakeRange(0, 5)) 
indexSet.addIndexesInRange(NSMakeRange(10, 4)) 
indexSet.addIndex(5) 
println(indexSet) 

然後,你可以在這裏做你的活動:

indexSet.enumerateIndexesUsingBlock { (index, stop) -> Void in 
    println(index) 
} 
相關問題