过滤数组但保持indexPath位置

时间:2016-09-13 09:46:58

标签: arrays swift uisearchbar

我在UISearchController

中使用了updateSearchResultsForSearchController

我正在使用NSPredicate

过滤一组用户名
        self.filteredChats.removeAll(keepCapacity: false)

    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
    let array = (self.gruppenNamen as NSArray).filteredArrayUsingPredicate(searchPredicate)
    self.filteredChats = array as! [String]

有没有办法存储每个已过滤元素的indexPath? 我需要知道,为了正确显示我的单元格,因为我也使用数组用于图像和其他数据。

1 个答案:

答案 0 :(得分:1)

我们说你有gruppenNamengruppenImages。你想让它们保持同步。 我强烈建议您使用属性名称和属性图像创建自定义类。

由于您似乎不希望这样,您可以使用indexesOfObjectsPassingTest:objectsAtIndexes:。我不使用Swift,所以我将在Objective-C中编码,但它应该很容易翻译。

NSIndexSet *indexes = [self.gruppenNamen indexesOfObjectsPassingTest:^BOOL(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        return [(NSString *)obj rangeOfString:searchController.searchBar.text options:NSCaseInsensitiveSearch].location != NSNotFound;
}];
self.filteredChat = [self. gruppenNamen objectsAtIndexes:indexes];
self.filteredImages = [self.gruppenImages objectsAtIndexes:indexes];

我使用rangeOfString:options代替谓词的contains[c]。你也可以在这里使用NSPredicate