多用字面量语法
OK,这一篇将是简单一篇,虽然书上写的很多,但是其实觉得没必要。
且看下面这一段代码:
<span style="font-family:Microsoft YaHei;">NSString *someString = @"Aquarius_Moon";</span>
这段代码大家都明白,是定义一个字符串。并且大家从头开始学习使用的时候就是这么用的。
但是仔细想想,任何一个对象的初始化不应该是先 alloc 然后 init 吗?
如果在仔细想想 C 语言中定义一个字符串的代码是什么呢?
<span style="font-family:Microsoft YaHei;">char someString = "Auqarius_Moon";</span>
对啦,有没有很像,其实objective-c中很多东西都是照搬c语言的
这样说来其实下面几种东西也是可以用简单类似c语言的方法来创建的。
这样在类C语言方法面前加一个@的语法,叫字面量语法。
1、NSNumber
<span style="font-family:Microsoft YaHei;">NSNumber *someNumber = @1;</span>
当然,如果有不同数据类型的怎么办?答案就是:直接写!so easy!
<span style="font-family:Microsoft YaHei;">NSNumber *intNumber = @1;
NSNumber *floatNumber = @2.5f;
NSNmuber *doubleNumber = @3.141592654;
NSNumber *boolNumber = @YES;
NSNumber *charNumber = @'a';</span>
下面还有个运算,来看看:
<span style="font-family:Microsoft YaHei;">int x = 5;
float y = 6.5f;
NSNumber *expressionNumber = @(x*y);</span>
2、NSArray
<span style="font-family:Microsoft YaHei;">NSArray *animals = @[@"dog",@"cat",@"tiger",@"monkey",@"mouse"];</span>
怎样取值呢?
<span style="font-family:Microsoft YaHei;">NSString *monkey = animals[3];</span>
这种情况下(后面NSDictionary也有同样的情况),如果你在给数组中添加元素的时候添加的元素是空值,会直接报错。
而使用objective-c的方法,将会少元素。例如:
<span style="font-family:Microsoft YaHei;">NSString *nilStr = nil;
NSArray *animals = [NSArray alloc] initWithObjectives:@"cat",nilStr,@"dog",nil];//animals = [ @"cat"]</span>
因为这样的初始化方法将会在遇见nil的时候完成创建。因此,我们应该比较推崇的是字面量语法。
因为它能让我们在问题发生的第一时间发现问题,而不是等到真正创建了然后数组越界了以后在去排查。
3、NSDcitionary
<span style="font-family:Microsoft YaHei;">NSDictionary *person = @{@"firstname":@"Li",@"secondname":@"Aquarius",@"age":@22};</span>
当然我们必须要取其中的键值吧:
<span style="font-family:Microsoft YaHei;">NSString *firstName = person[@"firstname"];
NSNumber *age = person[@"age"];</span>
4、可变数组与字典
NSMutableArray *mutableArr = [@[@1,@2,@3,@4,@5] mutableCopy];
mutableArr[1] = @"dog";
NSMutableDic *mutableDic = [@[@"one":@1,@"two":@2,@"three":@3]mutableCopy];
mutableDic[@"one"] = @100;
要点
- 应该使用字面量语法来创建字符串、数值、数组、字典。这样的方法更简明扼要。
- 用字面量语法创建数组或字典的时候若值中有nil,则会抛出异常,因此,注意不要有nil。