Objective-C 编程语言(8)快速枚举

Objective-C 编程语言(8)快速枚举,第1张

概述转载请标明出处: http://blog.csdn.net/zhangxingping 快速枚举     快速枚举的特性使得我们可以使用简洁的语法来安全、有效地枚举集合中的内容。 for...in     快速枚举的特性使得我们可以对集合中的元素进行枚举。其用法如下:     for (  类型 变量 in 表达式 )     {         处理语句     }     或者是     类型 转载请标明出处: http://blog.csdn.net/zhangxingping
快速枚举     快速枚举的特性使得我们可以使用简洁的语法来安全、有效地枚举集合中的内容。
for...in     快速枚举的特性使得我们可以对集合中的元素进行枚举。其用法如下:
    for (  类型 变量 in 表达式 )
    {
        处理语句
    }
    或者是
    类型 变量;
    for ( 变量 in 表达式 )
    {
        处理语句;
    }
    在上面的两种形式中,表达式的值都是要遵守NSFastEnumeration协议的。其中的迭代变量会被依次赋值为表达式值对象中的每一个元素,并针对每一个元素执行处理语句。当循环结束的时候,也就是所有元素都被遍历完毕的时候,迭代变量会被赋值为nil。如果循环提前结束,那么迭代变量的值将指向最后一次被遍历的那个对象。
使用快速枚举有如下的好处:
    ■  使用快速枚举的效率要高很多,比如和直接使用NSEnumerator相比较。
    ■  快速枚举的语法很简洁
    ■  这种枚举是"安全的"。快速枚举使用到了修改监视器,也就是说如果在枚举的过程中企图修该集合,则会产生异常。
        由于在枚举的过程中是不能对集合进行修改的,因此多个枚举是可以同时并发进行的。
遵守快速枚举协议     任何对外界提供访问对象的结合的类都可以遵守NSFastEnumeration协议,来支持快速枚举机制。Cocoa中的集合类NSArray,NSDictionary以及NSSet都遵守该协议,NSEnumerator也是。就NSArray和NSSet而言,很明显这种枚举是针对其中的内容进行枚举。而对其他的类来说,必须在对应的文档中对其所枚举的内容进行明确说明。例如,NSDictionary和核心数据类NSNanagedobjectModel都是支持快速枚举的。其中NSDictionary是对其中的关键字也就是key进行枚举;而NSManagedobjectModel则是对其中的条目entitIEs进行枚举。
使用快速枚举     下面的代码段展示了如何针对NSArray和NSDictionary类的对象使用快速枚举。
NSArray *array =[[NSArray arrayWithObjects:@"One",@"Two",@"Three",@"Four",nil]'for(Nsstring *element in array){    NSLog("element:%@",element);}NSDictionary *dictionary =[[NSDictionary dictionaryWithObjectsAndKeys:@"quattuor",@"four",@"quninque",@"file",@"sex",@"six",nil];Nsstring *key;for(key in dictionary){    NSLog(@"English:%@,Latin:%@",key,[dictionary valueForKey:key]);}

还可以使用NSEnumerator类的对象来进行快速枚举,如下:
NSArray *array =[[NSArray arrayWithObjects:@"One",nil];NSEnumberator *enumerator = [array reverSEObjectsEnumerator];for(Nsstring *element in enumerator){    if ([element isEqualToString:@"Three"])    {        break;    }}Nsstring *next =[enumbertor nextObject];//next = "Two"
    对于元素有序的结合或者是枚举器(enumerators)来讲,,比如NSArray或者是NSEnumerator的实例,枚举的过程也是按照元素的顺序进行的,因此,只需要对迭代器进行简单的计数就可以得到元素的正确索引。
NSArray *array = /* 假定数组存在*/;NSUInteger index = 0;for(ID element in array){    NSLog(@"Element at index %u is %@",index,element);    index++;}
    关于快速枚举的其它的方面:快速枚举和标准的for循环是一样的。可以使用break来中断这种迭代。如果在枚举的过程中想跳过某些元素,对其不进行处理,则可以使用嵌套的条件语句,如下:
NSArray *array = /* 假定数组存在*/;for(ID element in array){    if(/*对element进行某种检查*/)    {        /*只有对通过了检查的元素才执行该段代码*/    }}
    如果我们需要跳过第一个元素,并只对后面的5个元素进行处理,则可以这样做:
NSArray *array = /* 假定数组存在*/;NSUInteger index = 0;for(ID element in array){    if(index != 0)    {        NSLog(@"Element at index %u is :%@",element);            }    if(++index>=6)    {        break;    }}
总结

以上是内存溢出为你收集整理的Objective-C 编程语言(8)快速枚举全部内容,希望文章能够帮你解决Objective-C 编程语言(8)快速枚举所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1059156.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存