快速枚举NSIndexSet

你能快速枚举一个NSIndexSet ? 如果不是,列举集合中的项目的最好方法是什么?

快速枚举必须产生对象; 由于NSIndexSet包含标量数字( NSUInteger ),而不是对象,否则不能快速枚举索引集。

假设,它可以将它们组装成NSNumbers,但是它不会很快。

在OS X 10.6+和iOS SDK 4.0+中,可以使用-enumerateIndexesUsingBlock: message:

 NSIndexSet *idxSet = ... [idxSet enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) { //... do something with idx // *stop = YES; to stop iteration early }]; 

一个while循环应该做的伎俩。 在使用之前的索引之后,它会增加索引。

 /*int (as commented, unreliable across different platforms)*/ NSUInteger currentIndex = [someIndexSet firstIndex]; while (currentIndex != NSNotFound) { //use the currentIndex //increment currentIndex = [someIndexSet indexGreaterThanIndex: currentIndex]; } 

简短的回答:不。 NSIndexSet不符合<NSFastEnumeration>协议 。

假设你有一个NSTableView实例(我们称之为*tableView ),你可以从数据源( *myMutableArrayDataSource .. *myMutableArrayDataSource )中删除多个选定的行,使用:

 [myMutableArrayDataSource removeObjectsAtIndexes:[tableView selectedRowIndexes]]; 

[tableView selectedRowIndexes]返回一个NSIndexSet 。 无需自己开始枚举NSIndexSet的索引。