NSEnumerator使用

集合類(如:NSArray、NSSet、NSDictionary等)都可獲取到NSEnumerator, 該類是一個抽象類,沒有用來建立實例的公有接口。NSEnumerator的nextObject方法能夠遍歷每一個集合元素,結束返回nil,經過與while結合使用可遍歷集合中全部項。 html

例子中使用了與前例相同的Photo對象,具體定義參考 隱式循環 這一節。 數組

#import <Foundation/Foundation.h>
#import "Photo.h"

int main (int argc, const char * argv[])
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    //while+NSEnumerator
    
    //定義對象的數組
    NSArray *array = [NSArray arrayWithObjects:[[Photo alloc] init], [[Photo alloc] init],[[Photo alloc] init], nil];
    
    //經過objectEnumberator獲取集合的NSEnumerator
    NSEnumerator *myEnumerator = [array objectEnumerator];
    
    Photo *photo;  
    //nextObject遍歷每一項,結束返回nil
    //注意這裏使用的是「=」號,因此最外面還要再添加一對()
    while((photo = [myEnumerator nextObject]))
    {
        [photo draw];
    }

    [pool drain];
    return 0;
}

NSSet allObjects code

#import <Foundation/Foundation.h>
#import "Photo.h"

int main (int argc, const char * argv[])
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    //NSSet  allObjects
    NSSet *set = [NSSet setWithObjects:[[Photo alloc] init], [[Photo alloc] init],[[Photo alloc] init], nil];
    
    //allObjects僅能獲取NSArray,須要再次調用objectEnumberator
    //而且獲取的數組順序不肯定。
    NSEnumerator *myEnumerator = [[set allObjects] objectEnumerator];
    
    Photo *photo;
    while((photo = [myEnumerator nextObject]))
    {
        [photo draw];
    }

    [pool drain];
    return 0;
}

NSDictionary allValues allKeys htm

#import <Foundation/Foundation.h>
#import "Photo.h"

int main (int argc, const char * argv[])
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    //NSDictionary allValues
    //NSDictionary 添加項時是value在前j,key在後的,與C#相反
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                         [[Photo alloc] init], @"p1",
                         [[Photo alloc] init], @"p2",
                         [[Photo alloc] init], @"p3", nil];
    
    //allValues 只能獲取字典中值的數組列表,注意列表是無序的。
    NSEnumerator *myEnumerator = [[dict allValues] objectEnumerator];
    
    Photo *photo;
    while((photo = [myEnumerator nextObject]))
    {
        [photo draw];
    }
    
    //allKeys 遍歷字典中的全部key列表,而後能過objectForKey獲取值。注意列表是無序的。
    myEnumerator = [[dict allKeys] objectEnumerator];
    NSString *key;
    while((key = [myEnumerator nextObject]))
    {
        //objectForKey從字典中獲取key對應的值
        [[dict objectForKey:key] draw];
    }
    

    [pool drain];
    return 0;
}
相關文章
相關標籤/搜索