快速枚举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
的索引。