Ios 如何添加两个范围<;指数>;在一起

Ios 如何添加两个范围<;指数>;在一起,ios,swift,search,filter,range,Ios,Swift,Search,Filter,Range,因此,我正在筛选数据(所有字符串),并希望显示以下内容: 首字母包含搜索内容的搜索词(例如,搜索“Br”时,我希望看到所有以“Br”开头的词,如Break、Break、…) 字符串中包含单词的搜索词(例如,搜索“Br”时,会显示单词中包含“Br”的所有单词,如“groundbreaker”) 我已经让它们分别工作(请参见let found和let foundMore),但现在我想合并它们(首先显示第一个字母包含搜索的搜索词,然后是字符串包含搜索词的搜索词)。尝试使用加法符号,但出现以下错误 二进

因此,我正在筛选数据(所有字符串),并希望显示以下内容:

  • 首字母包含搜索内容的搜索词(例如,搜索“Br”时,我希望看到所有以“Br”开头的词,如Break、Break、…)
  • 字符串中包含单词的搜索词(例如,搜索“Br”时,会显示单词中包含“Br”的所有单词,如“groundbreaker”)
  • 我已经让它们分别工作(请参见
    let found
    let foundMore
    ),但现在我想合并它们(首先显示第一个字母包含搜索的搜索词,然后是字符串包含搜索词的搜索词)。尝试使用加法符号,但出现以下错误

    二进制运算符“+”不能应用于两个“范围”操作数


    对于您的情况,您可以将
    +
    替换为
    ??
    ,这样,如果任一范围为非零,它将一起设置为
    的值。这是最少的代码,但不一定是最明显或最容易阅读的。显式逻辑或nil测试更为明显。

    范围不能相加,因为当两个范围不相交时,结果可能不是正确的范围

    但是,您不需要添加此项,因为最终您会将整个范围与
    nil
    进行比较。这意味着您可以将两侧分别与
    nil
    进行比较:

    return s.rangeOfString(target, options: NSStringCompareOptions.AnchoredSearch) != nil
        || s.rangeOfString(target, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
    
    检查1。应该这样看待,而不是两者兼而有之

    然后应过滤两次,并将第二个数组附加到第一个数组:

    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
    

    如果可能,您可以尝试以下方法:

    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)
    }
    

    您好,这确实是我已经探索过的一个选项,但在本例中,它并没有按照我希望的方式过滤我的数据(首先显示搜索词,其中第一个字母包含您的搜索(例如,搜索“Br”时,我希望看到所有以“Br”开头的词,如Break、Break等)以及字符串包含该词的搜索词(例如,当搜索“Br”时,会显示单词中包含“Br”的所有单词,如“groundbreaker”)。这是因为过滤和排序是两件不同的事情,您需要先过滤,然后再进行排序。这是可行的,但它不会以我希望的方式过滤我的数据(选中1.和2.,它们应该像这样查看,而不是两者的混合)。这就像我想在第一个数组的末尾添加一个.append(如果有意义)@SoundShock,这也是可行的-请查看编辑。谢谢,这正是我想要的!
    indexSet.enumerateIndexesUsingBlock { (index, stop) -> Void in
        println(index)
    }