Objective-C字面量语法总结
2016-04-25 13:48
423 查看
我们在编写Objective-C代码时要尽量使用字面量语法,不仅使代码更简单,同事也更易读懂。我们可以用alloc及init方法来分配并初始化NSString对象,也可以这样写:
也能用这种字面量语法来声明NSNumber、NSArray、NSDictionary类的实例。使用字面量语法(literal syntax)可以缩减源代码长度,使其更为易读。
使用字面量创建NSNumber类型:
能够以NSNumber实例表示的所有数据类型都可使用该语法。例如:
使用字面量创建NSArray类型:
在数组中通过下表来取某个对象时,不使用字面量语法:
使用字面量语法:
此外,使用字面量语法更为安全。例如:
上面这段代码按字面量语法创建数组arrayB时会抛出异常。arrayA虽然能创建出来,但是其中却只含有object1一个对象。原因在于,“arrayWithObjects:”方法会依次处理各个参数,直到发现nil为止,由于object2是nil,所以该方法会提前结束。抛出异常令应用程序终止执行,这比创建好数组之后才发现元素个数少了要好。向数组中插入nil通常说明程序有错,而通过异常可以更快地发现这个错误。
使用字面量创建Dictionary类型:
可见字面量语法更简明,理解也比较顺畅,因为比较符合我们键——值的习惯。
字典也可以像数组那样用字面量语法访问。按照特定键访问其值的传统做法是:
与之等效的字面量语法则是:
若换用取下标操作来写,则是:
使用字面量语法创建出来的字符串、数组、字典对象都是不可变的(immutable)。若想要可变版本的对象,则需复制一份:
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];
相关文章推荐
- protocol的介绍与简单实用
- Cloneable接口和Object的clone()方法
- 缺少动态链接库: libthrift-0.9.3.so: cannot open shared object file: No such file or directory
- Objective-C Blocks 小测验
- Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加
- 将JsonObject转换成HashMap
- django-mvvm(django的FormObject)
- json-lib使用,JSONObject和JSONArray
- Android属性动画(一):ValueAimator和ObjectAnimator的基本使用
- java中的object... args参数
- php之PDO (PHP DATA OBJECT)
- objective-c IOS应用更新
- 使用JSONObject.fromObject的时候出现“There is a cycle in the hierarchy”异常 的解决办法
- iOS开发系列—Objective-C之Foundation框架
- json字符串转换为JSONObject和JSONArray .
- iOS开发系列--Objective-C之KVC、KVO
- Spring MVC 解决 Could not write JSON: No serializer found for class java.lang.Object
- iOS开发系列--Objective-C之类和对象
- iOS开发系列—Objective-C之基础概览
- 浅谈Swift和Objective-C之间的那点事。。。