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

高效Objective-C语法-字面量语法

2017-04-18 11:11 183 查看

NSString对象

从Objective-C 1.0开始,有一种简单的方式能创建NSString对象,这就是”字符串字面量”,语法如下:

NSString *str = @"hello word!";


如果不用这种语法的话,就要使用常见的alloc和init来分配并初始化NSString对象。使用字面量语法能够缩短源代码长度,使其更为易读。

字面数值NSNumber

有时候需要将整数,浮点数,布尔变量存入Objective-C对象中。这种情况下可以使用NSNumber类,该类可以处理多种类型的变量。如果不用字面量,那就需要使用如下方法:

NSNumber *num = [NSNumber numberWithInt:1];


然而使用字面量语法,则更为简洁:

NSNumber *intNum = @1;
NSNumber *floatNum = @1.75f;
NSNumber *doubleNum = @3.1415926;
NSNumber *boolNum = @YES;
NSNumber *charNum = @'a';


字面量同时也适用如下表达式:

int a = 2;
float b = 3.5f;
NSNumber *expressionNum = @(a * b);


这样做让NSNumber对象变得整洁,因为声明中只包含数值,而没有多余的语法成分。

字面量数组NSArray

数组是常用的数据结构。如果不使用字面量,那么就要这么来创建数组:

NSArray *array = [NSArray
arrayWithObjects:@"dog",@"cat",nil];


而使用字面量语法来创建的话,则是

NSArray *array =@[@"dog",@"cat"];


上面的做法不仅简单,还利于操作数组。例如:

NSString *dog = [array objectAtIndex:0];


若使用字面量,则是:

NSString *dog = array[0];


这也叫作”取下标”操作。不过,用字面量语法创建数组时要注意,若数组元素对象中有nil,则会抛出异常,因为字面量语法实际上是一种”语法糖”,其效果等于先创建了一个数组,然后把方括号内的所有对象都加到这个数组。看一组例子:

id object1 = @"123";
id object2 = nil;
id object3 = @"456";

NSArray *arrayA = [NSArray
arrayWithObjects:object1,object2,object3,nil];

NSArray *arrayB = @[object1,object2,object3];


按照字面量语法,arrayB会抛出异常,而arrayA虽然能创建数组,但是数组中只有object1一个对象,原因是arrayWithObjects:会依次处理各个参数,直到发现nil为止,由于object2是nil,所以该方法会提前结束。

这个微妙的差别表明,使用字面量语法更为安全。抛出异常令程序终止,这比创建好数组,才发现数组中元素个数少了要好。

字面量字典NSDictronary

字典的标准创建方法如下:

NSDictronary *dic = [NSDictronary
dictronaryWithObjectsAnyKeys:@"Mary",@"firstName" ,
@"Gally",@"lastName",
[NSNumber numberWithInt:28],@"age",
nil];


这样写就令人困惑了,<对象>,<键>这与通常理解的顺序相反。因此,这样的语法不容易读懂。如果改为字面量语法,就好多了。

NSDictronary *dic = @{@"firstName",@"Mary",
@"lastName",@"Gally",
@"age",@28};


这样理解就顺畅多了,代码也比较简洁。

与数组存在的问题一致,那就是一旦有nil值存在,就会抛出异常,原理与数组一致。

字典也可以像数组那样用字面量语法访问。传统做法是:

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


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

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


代码简单易读。

小结

字面量有个小小的限制,就是除了字符串以外,所创建出来的对象必须是Founcation框架才行。如果自定义了这些类的子类,则无法用字面量语法创建其对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective-c语法