gpt4 book ai didi

ios - NSPredicate with block - 它是如何工作的

转载 作者:行者123 更新时间:2023-11-28 21:57:18 25 4
gpt4 key购买 nike

我的应用程序中有一个搜索机制,到目前为止,NSPredicate 的对象用于过滤对象。

我很困惑,因为我的程序运行时发生了魔法。在我的程序中,有一个带有名称的数组和另一个带有声明为属性的过滤名称的可变数组。

@property (strong, nonatomic) NSArray *names;
@property (strong, nonatomic) NSMutableArray *filteredNames;

我在加载 View 时用名称初始化数组。

self.names = @[
@"Aeron",
@"Brandon",
@"Chris",
@"David",
@"Elvis",
@"Francisco",
@"George",
@"Oliver",
@"Lary",
@"Neythan",
@"Marcus",
@"Phil"
];

然后我设置一个表格 View 及其内容,安装搜索机制(iOS 8 的搜索机制,即 UISearchController)。开始吧,我实现了 UISearchResultsUpdating 协议(protocol),我的 updateSearchResultsForSearchController: 如下所示。

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
NSString *input = searchController.searchBar.text;
if (input.length > 0) {
[self.filteredNames removeAllObjects];

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
NSLog(@"Got [%@] string.", evaluatedObject);
NSRange range = [evaluatedObject rangeOfString:input options:NSCaseInsensitiveSearch];
return range.location != NSNotFound;
}];

NSArray *matches = [self.names filteredArrayUsingPredicate:predicate];
[self.filteredNames addObjectsFromArray:matches];

[((UITableViewController *)self.searchController.searchResultsController).tableView reloadData];
}
}

所以它工作得很好。但我想知道,为什么我会在 block 内获得带有名称的数组迭代?我知道 block 是好的,因为它们的规范是从一个堆栈中保存它们的帧,其中包含过去那一刻的所有变量和某些值,因此它们可以在最近执行。但是为什么 block 要迭代这个特定的数组呢?我试图声明一个新的并初始化它(因为我认为它需要所有集合及其值),但它没有用。

提前致谢!

最佳答案

要过滤数组,您必须遍历每个元素并根据谓词 block 对其进行测试。我相信您遇到的行为是有意为之的。

关于ios - NSPredicate with block - 它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26102807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com