您的位置:首页 > 移动开发 > Objective-C

Objective-C字面量语法总结

2016-04-25 13:48 423 查看
我们在编写Objective-C代码时要尽量使用字面量语法,不仅使代码更简单,同事也更易读懂。我们可以用alloc及init方法来分配并初始化NSString对象,也可以这样写:

NSString *someString = @"Objective-C字面量语法总结";


也能用这种字面量语法来声明NSNumber、NSArray、NSDictionary类的实例。使用字面量语法(literal syntax)可以缩减源代码长度,使其更为易读。

字面量数值NSNumber

不使用字面量创建NSNumber类型:

NSNumber *someNumber = [NSNumber numberWithInt:1];


使用字面量创建NSNumber类型:

NSNumber *someNumber = @1;


能够以NSNumber实例表示的所有数据类型都可使用该语法。例如:

NSNumber *intNumber = @1;
NSNumber *floatNumber = @2.5f;
NSNumber *doubleNumber = @3.14159;
NSNumber *boolNumber = @YES;
NSNumber *charNumber = @'a';


字面量数组NSArray

不使用字面量创建NSArray类型:

NSArray *animals =
[NSArray arrayWithObjects:@"cat", @"dog",
@"mouse", @"badger", nil];


使用字面量创建NSArray类型:

NSArray *animals = @[@"cat", @"dog", @"mouse", @"badger"];


在数组中通过下表来取某个对象时,不使用字面量语法:

NSString *dog = [animals objectAtIndex:1];


使用字面量语法:

NSString *dog = animals[1];


此外,使用字面量语法更为安全。例如:

id object1 = @1;
id object2 = nil;
id object3 = @3;
//arrayWithObjects
NSArray *arrayA = [NSArray arrayWithObjects:object1, object2, object3, nil];
//字面量语法
NSArray *arrayB = @[object1, object2, object3];


上面这段代码按字面量语法创建数组arrayB时会抛出异常。arrayA虽然能创建出来,但是其中却只含有object1一个对象。原因在于,“arrayWithObjects:”方法会依次处理各个参数,直到发现nil为止,由于object2是nil,所以该方法会提前结束。抛出异常令应用程序终止执行,这比创建好数组之后才发现元素个数少了要好。向数组中插入nil通常说明程序有错,而通过异常可以更快地发现这个错误。

字面量字典Dictionary

不使用字面量创建Dictionary类型:

NSDictionary *personData =
[NSDictionarydictionaryWithObjectsAndKeys:
@"Matt", @"firstName",
@"Galloway", @"lastName",
[NSNumber numberWithInt:28], @"age",
nil];


使用字面量创建Dictionary类型:

NSDictionary *personData =
@{@"firstName" : @"Matt",
@"lastName" : @"Galloway",
@"age" : @28};


可见字面量语法更简明,理解也比较顺畅,因为比较符合我们键——值的习惯。

字典也可以像数组那样用字面量语法访问。按照特定键访问其值的传统做法是:

NSString *lastName = [personData objectForKey:@"lastName"];


与之等效的字面量语法则是:

NSString *lastName = personData[@"lastName"];


可变数组与字典mutableArray & mutableDictionary

修改可变数组与字典内容的标准做法是:

[mutableArray replaceObjectAtIndex:1 withObject:@"dog"];
[mutableDictionary setObject:@"Galloway"forKey:@"lastName"];


若换用取下标操作来写,则是:

mutableArray[1] = @"dog";
mutableDictionary[@"lastName"] = @"Galloway";


使用字面量语法创建出来的字符串、数组、字典对象都是不可变的(immutable)。若想要可变版本的对象,则需复制一份:

NSMutableArray *mutable = [@[@1, @2, @3, @4, @5]mutableCopy];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: