应该使用字面量语法来创建字符串,数值,数组,字典。
应该通过取下标操作来访问数组下标或是字典中的键所对应的元素。
我们经常用到的有Foundation框架中的NSString,NSNumber,NSArray,NSDictionary。
这条经验告诉我们要多使用字面量来创建上述这些类。
比如说NSString,何为字面量创建呢?
@"hello"; //这就是一个字面量
NSString* words = @"how are you!";
像上面这样的创建方式就叫做使用字面量创建。
NSString* words = [[NSString alloc]init...];
相比这样的创建方式,上面那种有何好处呢?
1.缩减代码量;
2.使代码更加易读,简洁。
实际上,当我们直接使用字面量语法的时候,都是程序在背后帮我们进行了alloc init方式的创建。这被称为是“语法糖”。
语法糖:指计算机语言中与另外一套语法等效,但是开发者使用起来更加方便的语法。
接下来将要描述的其他三个类都有着这样的语法。
Wait!
还有一条关于NSString的小技巧。在C++中我们知道,可以使用字面量拼接的语法。像是这样:
const char* str = "hello" "word";
那么在OC中呢?同样也可以使用这样的语法。
NSString* strs = @"hello" @"world";
NSString* strs1 = @"hello" "world";
NSString* strs2 = @"hello"
@"world"
"!";
至于具体可以用到哪些地方呢?数据库查询语算是一个,可以分成好几行,使代码更加清晰。
NSNumber
将基本数据类型放到数组或是字典中的时候,我们就需要对其进行包装成类。
若不使用字面量,则是
NSNumber* num = [NSNumber numberWithInt:123];
如果使用字面则只需要:
NSNumber* num1 = @1;
NSNumber* num2 = @3.14;
NSNumber* num3 = @YES;
NSNumber* num4 = @'a';
...
就是这么easy,一眼就看到了具体数值。
NSArray:
一般创建方法及取下标方法:
NSArray* arr =[NSArray arryWithObjects:@"tom",@"jeny",@"frank",nil];
[arr objectAtIndex:1];
使用字面量:
NSArray* arr = @[@"tom",@"tim",@"frank"];
arr[1];
这种方式不仅简单易写,还有利于操作数组。
注意:我们在使用字面量创建数组的时候,如果插入的某个对象为nil,则会报错。正是如此我们在使用字面量创建数组的时候可以更早的发现错误。如果使用本身的方法创建的,则会在遇到nil时结束添加,而不会报错,这样会导致数组元素数量变少。不容易及时发现。
NSDictionary
NSDictionary *personData=[NSDictionary dictionaryWithObjectsAndKeys:
@"Matt",@"firstName",@"Galloway",@"lastName",[NSNumber numberWithInt:28],@"age",nil];
这样key在后obj在前的方式貌似有点反逻辑?而且整个代码还很冗余的感觉。
使用了字面量之后:
NSDictionary *personData = @{@"firstName":@"Matt",@"lastName":@"Galloway",@"age":@28};
瞬间清爽了!是吧?
同样的这样的添加方法也会在有对象为nil时报错,有助于查错;而是用本身的方法则不会。
访问key的具体内容呢?
NSString *lastName=[personData objectForKey:@"lastName"];
NSString *lastName=personData[@"lastName"];
哪个更好用一比便知。
要明白的:
1.字面量语法是很好用,但是仅限于Foundation框架内的对象才行,自定义对象是不行的哦。好在这个框架里的对象已经基本涵盖我们所需要的对象了。
2.使用字面量创建出来的字符串,数组,字典对象都是不可变的,如需要可变版本则需要使用mutablecopy方法。
但是总的来说,使用字面量的优点大于它的瑕疵。