



























item 3讲的是Objective-C里面的“字面量语法”-“Literal Syntax”,个人觉得非常有用。
本节讲了Objective-C中的“字面量语法”,并且建议我们更多的使用这种语法,而不是使用传统的等价的函数方法。
当我们使用Objective-C编程的时候,总会经常使用到几种Foundation框架中的基本类,如NSString、NSNumber、NSArray、NSDictionary,或者是它们的子类。例如,当我们想创建一个字符串的时候,会这么写:
1 | NSString *str = |
不知道各位写这句的时候有没有觉得奇怪?为什么不用先“alloc”,再“initWithXXX”这么来创建呢。是的,这里创建字符串,就用到了Objective-C提供的“字面量语法”-“Literal Syntax”,而这种语法的“标志”就是“@”符号。
有了字面量语法,我们就不用每次创建一些基本类型的时候,写一大堆alloc、init了。
字符串可以用字面量语法创建,数字类NSNumber肯定也可以,如下:
1 | NSNumber *intNum = @1; |
看,是不是很方便~
数组算是最常用的一种数据结构了,如果没有字面量语法,创建数组可能是这样:
1 | NSArray *numbers = [[NSArray alloc] initWithObjects:@1, @1.1, @2.0f, @YES, nil]; |
用字面量语法的话,就是这样:
1 | NSArray *numbers = @[@1, @1.1, @2.0f, @YES] |
创建了数组,肯定要从数组里面取值,用NSArray的方法就是这样:
1 |
|
跟C语言、Java这些语法很不一样啊,人家都是通过中括号“[]”直接用下标取值就可以。有了字面量同语法,Objective-C也可以这样:
1 |
|
传统的通过“initWithObjects”方法创建数组的时候,是根据最后的“nil”判断数组是否结束的,也就是说,用于初始化数组的元素中有“nil”值也不会导致异常(Exception),如下语句:
1 | NSNumber *number1 = @1; |
但是,如果用字面量语法创建,就是出问题:
1 | NSNumber *number1 = @1; |
因为字面量语法只是单纯的将中括号中的元素全部加到数组中,但是,Objective-C中的数组是不可以存放nil值的,所以程序会运行时抛出异常。
如果不用字面量语法创建字典,传统的创建函数简直令人匪夷所思:
1 |
|
是不是很奇怪,value在前面,key在后面
所以,还是用新的语法吧:
1 | NSDictionary *dict = @{@"number1" : @1, @"number2" : @2}; |
这样才符合“常识”嘛,key在前,value在后面,跟JSON的定义一样。
取值的语法跟NSArray的语法很想,只不过是将下标数字变成了key:
1 |
|
需要注意的地方,跟创建数组一样,NSDictionary的value不能为nil值,否则会抛出异常。
总的来说,使用字面量语法可以让代码更加清晰、简单,毕竟,更少的代码,有时候意味着更少的错误。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。