工作在Fundation框架下2——Start Developing iOS Apps Today——从今天开始开发IOS(IOS7版)系列源文档翻译(十六)
创建数组
可有多种不同的初始化和工厂方法,取决于对象的数目。
+ (id)arrayWithObject:(id)anObject; + (id)arrayWithObjects:(id)firstObject, ...; - (id)initWithObjects:(id)firstObject, ...;
NSArray *someArray = [NSArray arrayWithObjects:someObject, someString, someNumber, someValue, nil];
而nil是作为数组结束的标志,是必须的。
id firstObject = @"someString"; id secondObject = nil; id thirdObject = @"anotherString"; NSArray *someArray = [NSArray arrayWithObjects:firstObject, secondObject, thirdObject, nil];
在这种情况下,包含的someArray仅firstObject,因为secondObject是nil,将被解释为项目的列表的末尾。
它可以创建使用紧凑语法的数组。
NSArray *someArray = @[firstObject, secondObject, thirdObject];
当使用这种语法,不终止与未缴其实对象列表,nil是一个无效的值。例如,你会在运行时得到一个异常,如果你尝试执行下面的代码:
id firstObject = @"someString"; id secondObject = nil; NSArray *someArray = @[firstObject, secondObject]; // exception: "attempt to insert nil object"
遍历数组对象
NSUInteger numberOfItems = [someArray count]; if ([someArray containsObject:someString]) { ... }
您也可以查询数组中的项目给定的索引处。如果你试图请求一个无效的指标,你会在运行时得到一个异常——出界。为了避免收到一个异常,总是首先检查的项目数。
if ([someArray count] > 0) { NSLog(@"First item is: %@", [someArray objectAtIndex:0]); }
此示例检查的项目数是否大于零。如果是,该Fundation函数的NSLog记录中的第一项,它具有的索引为0的描述。
作为替代使用objectAtIndex:,你也可以使用下标语法,这就像在一个标准的C数组访问值查询数组。前面的例子可以重写是这样的:
if ([someArray count] > 0) { NSLog(@"First item is: %@", someArray[0]); }
排序数组对象
每个字符串:例如,你可以通过调用比较排序字符串数组。
NSArray *unsortedStrings = @[@"gammaString", @"alphaString", @"betaString"]; NSArray *sortedStrings = [unsortedStrings sortedArrayUsingSelector:@selector(compare:)];
不确定性
NSMutableString *mutableString = [NSMutableString stringWithString:@"Hello"]; NSArray *immutableArray = @[mutableString];你变化的字符串中无法停止。
if ([immutableArray count] > 0) { id string = immutableArray[0]; if ([string isKindOfClass:[NSMutableString class]]) { [string appendString:@" World!"]; } }
如果你想初始创建后从一个数组中添加或删除对象,请使用NSMutableArray里,它增加了多种方法来添加,删除或替换一个或多个对象
NSMutableArray *mutableArray = [NSMutableArray array]; [mutableArray addObject:@"gamma"]; [mutableArray addObject:@"alpha"]; [mutableArray addObject:@"beta"]; [mutableArray replaceObjectAtIndex:0 withObject:@"epsilon"];
此示例创建由对象组成的数组@“epsilon”,@“alpha”,并@“beta”。
它也可以将可变数组排序的地方,而无需创建一个二级数组。
[mutableArray sortUsingSelector:@selector(caseInsensitiveCompare:)];在这种情况下,所包含的项目进行排序进入升,不区分大小写的顺序@“alpha”,@“beta”,并@“epsilon”。
集合
一集合(NSSet)对象类似于数组,但是它维护不同的对象的无序组。因为基本的NSSet类是不可变的,其内容必须在创建时指定,或者使用分配和初始化或类工厂方法。
NSSet *simpleSet = [NSSet setWithObjects:@"Hello, World!", @42, aValue, anObject, nil];
与NSArray的,在initWithObjects:和setWithObjects:方法都接受一个无终止的,可变数目的参数。在可变的NSSet子类的名称是NSMutableSet。
集合只存储一个引用单个对象,即使你尝试添加一个对象不止一次。
NSNumber *number = @42; NSSet *numberSet = [NSSet setWithObjects:number, number, number, number, nil];
字典
最好的做法是使用字符串对象作为字典键。
创建一个字典
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys: someObject, @"anObject", @"Hello, World!", @"helloString", @42, @"magicNumber", someValue, @"aValue", nil];
对于dictionaryWithObjectsAndKeys:和initWithObjectsAndKeys:方法,每个对象指定其键之前,和对象键的列表必须零终止。
Objective-C语言提供了一个简洁的语法字典文字创作。
NSDictionary *dictionary = @{ @"anObject" : someObject, @"helloString" : @"Hello, World!", @"magicNumber" : @42, @"aValue" : someValue };
对于字典文字,关键是其指定对象之前,和对象键的列表不是无终止。
查询字典
NSNumber *storedNumber = [dictionary objectForKey:@"magicNumber"];
如果没有找到对象,该objectForKey:方法返回nil。
还有一个标语法的替代品使用objectForKey:。
NSNumber *storedNumber = dictionary[@"magicNumber"];
不确定性
[dictionary setObject:@"another string" forKey:@"secondString"]; [dictionary removeObjectForKey:@"anObject"];
用NSNull代表nil
NSArray *array = @[ @"string", @42, [NSNull null] ];
与NSNull,空方法总是返回相同的实例。这表现在这样的类被称为单实例类。你可以检查阵列中的对象是否等于这样的共享NSNull实例:
for (id object in array) { if (object == [NSNull null]) { NSLog(@"Found a null object"); } }
虽然Foundation框架包含了许多比这里描述了更多的功能,你不需要知道每一个细节的时候了。如果你想了解更多有关基金会,看看Foundation框架参考。现在,你有足够的信息来继续实现你的todolist的应用程序,你会做通过编写自定义数据类。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。