作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
所以我正在过滤数据(所有字符串),并希望显示以下内容:
我已经让它们分开工作(参见 let found
和 let foundMore
),但现在我想合并它们(首先显示搜索第一个字母包含您的搜索的单词,在字符串包含该单词的单词之后)。尝试使用加号,但出现以下错误
Binary operator '+' cannot be applied to two 'Range?' operands
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()
}
}
最佳答案
范围不能相加,因为当两个范围不相交时,结果可能不是合适的范围。
但是,您不需要添加此内容,因为最后您将整体范围与nil
进行了比较。这意味着您可以将两侧分别与 nil
进行比较:
return s.rangeOfString(target, options: NSStringCompareOptions.AnchoredSearch) != nil
|| s.rangeOfString(target, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
check 1. and 2., should be viewed like this, not a mix of both
然后你应该过滤两次,并将第二个数组附加到第一个:
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
关于ios - 如何将两个 Range<Index> 相加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38695742/
我是一名优秀的程序员,十分优秀!