• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Objective-C边学边记-8:FoundationKit快速教程之数组、枚举

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

4.集合
集合类:NSArray 、NSDictionary
1)NSArray
NSArray是Cocoa的一个类,用来存储对象的有序列表,可以在NSArray中放入任意类型的对象。
NSArray中只能存储Objective-C的对象,而不能存储C语言中的基本数据类型,如int,float,enum,struct,或者NSArray中的随机指针。同时,也不能在NSArray中存储nil(对象的零值或NULL值)。

1 #import <Foundation/Foundation.h>
2
3
4
5  int main (int argc, const char * argv[]) {
6 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
7
8 // 创建数组 arrayWithObjects:
9   NSArray *array;
10 array = [NSArray arrayWithObjects:
11 @"one", @"two", @"three", nil]; //列表结尾添加nil表示列表结束
12
13 // 获取对象个数 count:
14   NSLog(@" the count of array is: %d",
15 [array count]);
16
17 // 获取特定索引处的对象 objectAtIndex:
18   int i;
19 for (i = 0 ; i < [array count]; i++)
20 {
21 NSLog(@"index %d has %@",
22 i,[array objectAtIndex:i]);
23 }
24
25 // 将字符串切分成数组 componentsSeparatedByString:
26   NSString *str = @"oop : ack : elf : com : cn : net";
27 NSArray *arr = [str componentsSeparatedByString:@" : "];
28 NSLog(@"str is : %@",str);
29 NSLog(@"arr is :");
30 for (NSString *s in arr)
31 {
32 NSLog(@"\"%@\"",s);
33 }
34 // 合并数组并创建字符串 componentsJoinedByString:
35   NSLog(@"合并数组到NSArray.");
36 str = [arr componentsJoinedByString:@" , "];
37 NSLog(@"str is : %@",str);
38 NSLog(@"arr is :");
39 for (NSString *s in arr)
40 {
41 NSLog(@"\"%@\"",s);
42 }
43
44
45 [pool drain];
46 return 0;
47 }
48
49
50  

 


2)可变数组:
与NSString一样,一旦创建NSArray它就固定下来了,不能添加或删除其中的任何元素。当然,包含在数组中的对象是可以改变的,当数组对象本身一直都不会改变。
可变数组可以使用NSMutableArray
Example:

1 //
2 // MyClass.h
3 // FoundationKit4
4 //
5 // Created by Elf Sundae on 10/22/10.
6 // Copyright 2010 Control-Strength. All rights reserved.
7 //
8
9 #import <Cocoa/Cocoa.h>
10
11
12 @interface MyClass : NSObject
13 {
14 NSString *firstName;
15 NSString *lastName;
16 }
17
18
19 - (void) setFirstName:(NSString *)m_firstName;
20 - (NSString *) firstName;
21
22 - (void) setLastName: (NSString *) m_lastName;
23 - (NSString *) lastName;
24
25 - (NSString *) fullName;
26
27 @end

 

1 //
2 // MyClass.m
3 // FoundationKit4
4 //
5 // Created by Elf Sundae on 10/22/10.
6 // Copyright 2010 Control-Strength. All rights reserved.
7 //
8
9 #import "MyClass.h"
10
11
12 @implementation MyClass
13
14 - (void) setFirstName:(NSString *)m_firstName{
15
16 firstName = m_firstName;
17 }
18 - (NSString *) firstName{
19 return firstName;
20 }
21
22 - (void) setLastName: (NSString *) m_lastName{
23 lastName = m_lastName;
24 }
25 - (NSString *) lastName{
26 return lastName;
27 }
28
29
30 - (NSString *) fullName
31 {
32 if (firstName == nil || lastName == nil) {
33 return @"No Name found.";
34 } else {
35 return [NSString stringWithFormat:@"%@ %@",
36 firstName,lastName];
37 }
38
39 }
40 @end

 

1 //
2 // FoundationKit4.m
3 //
4
5 #import <Foundation/Foundation.h>
6 #import "MyClass.h"
7
8 int main (int argc, const char * argv[]) {
9 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
10
11 // 创建可变数组
12 NSMutableArray *array;
13 array = [NSMutableArray arrayWithCapacity: 20];
14 // 添加对象: addObject
15 int i;
16 for (i = 0; i < 4; i++)
17 {
18 MyClass *myClass = [MyClass new];
19 [array addObject:myClass];
20 }
21 [[array objectAtIndex:0] setFirstName:@"Elf"];
22 [[array objectAtIndex:0] setLastName:@"Sundae"];
23
24 [[array objectAtIndex:3] setFirstName:@"Joe"];
25 [[array objectAtIndex:3] setLastName:@"Gates"];
26
27
28 for (MyClass *my in array)
29 {
30 NSLog(@"%@",[my fullName]);
31 }
32
33 // 删除对象:removeObjectAtIndex:
34 NSLog(@"删除第二个对象后:");
35 [array removeObjectAtIndex:1];
36
37 for (MyClass *my in array)
38 {
39 NSLog(@"%@",[my fullName]);
40 }
41
42 [pool drain];
43 return 0;
44 }
45
46

 

3)枚举 (NSEnumerator)
遍历数组每个索引处的对象,你可以编写一个0到[array count]的循环,而NSEnumerator用来描述这种集合迭代运算的方式。
通过objectEnumerator向数组请求枚举器,如果想从后向前浏览集合,可使用reverseObjectEnumerator方法。在获得枚举器后,可以开始一个while循环,每次循环都向这个枚举器请求它的下一个对象:nextObject。nextObject返回nil值时,循环结束。示例如下:

1 // NSEnumerator示例
2 NSEnumerator *enumerator;
3 enumerator = [array objectEnumerator];
4 id thing;
5 while (thing = [enumerator nextObject]) {
6 NSLog(@"I found %@",thing);
7 }

 

 

对于可变数组进行枚举操作时,主要不要添加或删除数组中的对象。


4)快速枚举
Objective-C2.0支持快速枚举:如

1 for (NSString *string in array)
2 {
3 NSLog(@" I found %@",string);
4 }
5
6

 

这个循环将会遍历数组中的每个元素,并且用变量string存储每个数组值。它比枚举器语法更加简洁快捷。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
当前手机是否联网 Objective-C for iphone Connected To Network发布时间:2022-07-12
下一篇:
10款iOS高效开发必备的Objective-C类库发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap