EdwardJ

Stay Hungry Stay Foolish

0%

字面量语法

导语

字面量语法是利用语法糖(指与开发所用语言等效且更易读的语法)的特性来提高代码的可读性。在Objective-C(以下简称OC)的使用过程中,我们会经常用到Foundation框架中的NSString、NSNumber、NSArray、NSDictionary,但是OC语法繁杂,在创建它们的时候会让代码变得不易读,所以利用字面量来提高代码可读性。

1、NSString 字面量

不用字面量创建NSSting对象的时候:

1
NSString *string = [[NSString alloc] initWithString:@"String"];

使用字面量创建字符串对象:

1
NSString *string = @"String";

以上貌似然并卵,而且目前大家基本都是这么写的。

2、NSNumber 字面量

不用字面量的创建:

1
NSNumber *someNumber = [NSNumber numberWithInt:1];

使用字面创建:

1
2
3
4
5
NSNumber *intNumber    = @1;
NSNumber *floatNumber = @2.2f;
NSNumber *doubleNumber = @2.123456;
NSNumber *boolNumber = @YES;
NSNumber *charNumber = @'a';

3、NSArray字面量

不用字面量创建一个数组:

1
NSArray *array = [NSArray arrayWithObjects:@"first",@"second",@"third", nil];

获取某个下标对应的对象:

1
[array objectAtIndex:2];

使用字面量创建:

1
NSArray *array = @[@"first",@"second",@"third"];

获取下标对应对象:

1
array[2];

大家应该都在用字面量的方式吧。无论使用哪种方法创建,都需要注意:

如果数组元素中有nil,用字面量创建的数组则会出现异常;用arrayWithObjects创建的数组,会依次处理各个参数,直到遇到nil为止,也就是说,如果array中的@"second"换成nil,则创建的数组只有@"first"一个元素。

4、NSDictionary字面量

字典是映射型的数据结构,表现为键值对。创建方式:

1
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"one",@"2",@"two",@"3",@"three", nil];

这种创建方式,顺序为<值>,<键>,<值>,<键>,当键值对多了以后,就很难看清楚了。

使用字面量创建:

1
2
/*asssad*/
NSDictionary *dictionary = @{@"one":@"1",@"two":@"2",@"three":@"3"};

与数组字面量创建一样,如果字典字面创建的时候,有元素为nil,会出现异常;dictionaryWithObjectsAndKeys创建的时候,会在首个nil之前停下来,nil之后则不会被创建进字典。

不使用字面量访问字典元素:

1
[dictionary objectForKey:@"one"];

使用字面量访问字典元素:

1
dictionary[@"one"];

##5、可变字典与可变数组
可变字典与可变数组不可使用字面量的方法初始化,否则会出现异常。但是可以使用字面量的方法来访问对应下标和对应键的元素。
如果非要使用字面量来创建可变数组或者可变字典,那就需要在创建的时候复制一份:

1
2
NSMutableArray *mutArray = [@[@"1",@"2",@"3"] mutableCopy];
NSMutableDictionary *mutDictionary = [@{@"one":@"1",@"two":@"2",@"three":@"3"} mutableCopy];

这样做会多创建一个对象而且还多调用了mutableCopy

总结

虽然字面量方法很简单,而且大部分开发者在平常开发时都会使用,但其简约的思想是整洁代码不可或缺的。字面量创建NSString、NSNumber、NSArray、NSDictionary的时候会方便很多,尤其是当创建所需的元素很多的时候,字面量方法会提高代码的可读性,所以建议大家使用字面量语法。当然,它也有其局限性,对与可变类型的支持不够好。

参考书籍《Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法》

如果内容对你有用,赏我一杯咖啡未尝不可^_^