Objective-C(十二、快速枚举,枚举器NSEnumerator和集合类NSSet)——iOS开发基础

结合之前的学习笔记以及参考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~

十二、快速枚举,枚举器和集合类NSSet

注意:下面的所提及的方法都是常用方法,全部列出不大现实,参考Xcode帮助文档即可~

1、遍历、快速遍历
(1)普通遍历:

 for (NSUInteger i = 0; i < array.count; i++) { NSLog(@"%@", array[i]); }

(2)快速遍历

 for (id obj in array) {
    NSLog(@"%@", obj);
 }

快速遍历(快速枚举)语法

 for( 变量 in 集合 ) {
     相应的处理
 }

集合可以是可变集合也可以是不可变,但是可变集合在循环过程中不允许改变,否则会抛出异常

2、枚举器NSEnumerator
(1)基础知识:用来遍历集合类重元素对象的抽象类
(2)常用方法

- (id)nextObject; //一次遍历每个元素,结束返回nil,通常与while结合使用遍历所有项 - (NSArray *)allObjects; //返回集合中未被遍历的所有元素 - (NSEnumerator *)objectEnumerator; //顺序遍历的枚举其 - (NSEnumerator *)reverseObjectEnumerator; //逆序遍历的枚举器

array4还是前一篇章十一中的定义,由于前一篇篇幅过长,因此分来两部分。

 NSEnumerator *enumerator = [array4 reverseObjectEnumerator];
 id object;
 while ((object = [enumerator nextObject]) != nil) {
     NSLog(@"%@",object);
 }

output:

<MusicPlayer: 0x100406710>
 obj2
 1

(3)与for…in语法结合

 NSEnumerator *enumerator = [array4 reverseObjectEnumerator];
 id object;
 for (object in enumerator) {
     NSLog(@"%@",object);
 }

output:

<MusicPlayer: 0x100106870>
obj2
 1

3、NSSet(单值对象的集合
(1)NSSet与NSArray的异同
共同点:都是集合,能存放多个OC对象,且只能存放OC对象
不同点:NSArray有序排列,NSSet元素无序列排列;NSArray可容纳重复的对象,NSset不能重复,重复时前者会被替换。
(2)
Objective-C(十二、快速枚举,枚举器NSEnumerator和集合类NSSet)——iOS开发基础_第1张图片
(3)常用方法
初始化

 + (instancetype)set;
 + (instancetype)setWithObject:(id)object;
 - (instancetype)initWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;
 - (instancetype)initWithArray:(NSArray *)array;    //array中有重复,只保存一个

其他

 - (NSUInteger)count;  - (NSArray *)allObjects; //将集合对象中所有元素以数组形式返回  - (void)addObject:(id)object; //从集合中随机抽取一个元素  - (BOOL)containsObject:(id)anObject;  - (BOOL)intersectsSet:(NSSet *)otherSet; //是否有共同的元素  - (BOOL)isEqualToSet:(NSSet *)otherSet; //两个集合是否相等  - (BOOL)isSubsetOfSet:(NSSet *)otherSet; //当前集合是否全部位于集合otherSet中

(4)NSMutableSet常用方法

 - (void)addObject:(id)object;  - (void)removeObject:(id)object;  - (instancetype)initWithCapacity:(NSUInteger)numItems NS_DESIGNATED_INITIALIZER;  - (void)unionSet:(NSSet *)otherSet; //合并另个集合  - (void)intersectSet:(NSSet *)otherSet; //生成另个集合的交集  - (void)minusSet:(NSSet *)otherSet; //从当前集合中删除同otherSet共同的元素

你可能感兴趣的:(oc,快速枚举,NSSet,ios开发基础,枚举器)