你如何返回通过enumerateObjectsUsingBlock找到的项?
你如何返回通过enumerateObjectsUsingBlock找到的项?
我有一个NSMutableOrderedSet。
我需要枚举它,看起来集合内置的唯一选项都是基于块的。因此,在选择基于最简单的块的选项时,我有这样的东西...
[anNSMutableOrderedSet enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([(SomeClass*)obj isWhatIWant]) { *stop = YES; // Ok, found what I'm looking for, but how do I get it out to the rest of the code? } }]
admin 更改状态以发布 2023年5月23日
您需要传入一个回调/代码块进行调用。
- (void)someMethod { [self enumerateWithCompletion:^(NSObject *aObject) { // Do something with result }]; } - (void)enumerateWithCompletion:(void (^)(NSObject *aObject))completion { [anNSMutableOrderedSet enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([(SomeClass*)obj isWhatIWant]) { *stop = YES; if (completion) { completion(obj); } } }]; }
您也可以使用代理,并调用已定义的代理返回对象。
[self.delegate enumerationResultObject:obj];
更新:
发现enumerateObjectsUsingBlock:实际上是同步调用的,所以更好的方法是使用__block
变量。回调仍然可以工作,但可能被误解为具有误导性。