Literals(字面语法)
字面语法是的编译器指令,它提供简化符号来创建对象。
![](http://www.cocoachina.com/cms/uploads/allimg/140428/4673_140428161258_1.png)
- 1
NSString *greeting = @
"Hello World"
;
它的语法很简单,上面的代码就是通过在C字符串的前面加上@符号创建了一个NSString对象greeting,整段代码看起来简洁易懂,如果没有直接量语法,那么创建这个greeting可能就要使用下面的方法了:
1NSString *greeting = [NSString stringWithUTF8String:
"Hello World"
];
在Xcode4.4和LLVM4.0之后,一些新特性被提出来,其中一个就是对NSNumber、NSArray和NSDictionary使用字面量语法。
NSNumber:
在新特性提出来之前,我们要创建的一个NSNumber对象可能是这样的:
1NSNumber *aNumber = [NSNumber numberWithInt:22];
那么现在就可以这样写:
1NSNumber *aNumber = @22;
当然这里不仅对于 -numberWithInt:适用,对于其他的也同样适用:
123456789101112131415//不用字面量的方式:
NSNumber *aBool = [NSNumber numberWithBool:YES];
NSNumber *aChar = [NSNumber numberWithChar:
'a'
];
NSNumber *aUnsigned = [NSNumber numberWithUnsignedInt:22U];
NSNumber *aLong = [NSNumber numberWithLong:27L];
NSNumber *aFloat = [NSNumber numberWithFloat:3.14F];
NSNumber *aDouble = [NSNumber numberWithDouble:3.14];
//字面量的写法
NSNumber *aBool = @YES;
NSNumber *aChar = @
'a'
;
NSNumber *aUnsigned = @22U;
NSNumber *aLong = @27L
NSNumber *aFloat = @3.14F;
NSNumber *aDouble = @3.14;
1NSNumber *result = @(2+3*4);
NSArray
不使用字面量语法的时候,创建一个数组通常是这样的:
1NSArray *aArray = [NSArray arrayWithObjects: [NSNumber numberWithInt:22], @
"kuntzuo"
, @
"hello"
, nil];
而有了字面量语法之后,就可以这样写:
1NSArray *aArray = @[@22, @
"kuntzuo"
, @
"hello"
];
创建数组的字面量的方式变得更加简洁了,在方括号前面加上字面量@符号 ,里面写上内容,而且不再需要nil作为结束标志了,如果没有去掉nil会得一个警告,运行时会报错。
NSDictionary
创建一个NSDictionary的传统方式是这样:
1234567891011121314151617NSArray *keys = [NSArray arrayWithObjects:@
"Name"
, @
"Sex"
, @
"Age"
, nil];
NSArray *objects = [NSArray arrayWithObjects:@
"kuntzuo"
, @
"男"
, [NSNumber numberWithInt:22], nil];
NSDictionary *myProfile = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
//或者是
NSDictionary *myProfile = [NSDictionary dictionaryWithObjectsAndKeys:
@
"kuntzuo "
, @
"Name"
,
@
"男 "
, @
"Sex"
,
[NSNumber numberWithInt:22], @
"Age"
,
nil];
以上两种方法看起来都不简单,而且容易混乱。字面量语法给我们更好的可选项,看看下面写法:
1NSDictionary *myProfile = @{
"Name"
:
"kuntzuo"
,
"Sex"
:
"男"
,
"Age"
:@22};
写起来方便看起来爽有木有,这样的形式看起来是不是很熟悉呢?像JavaScript的对象?像JSON?反正我觉得方便很多啦。
除了用字面量来创建NSArray、NSNumber、NSDictionary之外。如果集合是可变类型如
NSMutableArray、NSMutableDictionary,新特性还允许你用下标的方式来访问和修改集合中的值。下面的代码简单演示了这一特性。
123456789101112131415161718192021//对于上面的NSArray *aArray
NSArray *aArray = @[@22, @
"kuntzuo"
, @
"hello"
];
NSMutableArray *mutableArray = [@[@22, @
"kuntzuo"
, @
"hello"
] mutableCopy];
//传统访问方式
NSString *greeting = [mutableArray objectAtIndex:2];
//"hello"
//新方法访问
NSString *greeting = mutableArray[2];
// "hello"
//新方法修改
mutableArray[2] = @
"hello world"
;
//对于上面的NSDictionary
NSDictionary *myProfile = @{
"Name"
:
"kuntzuo"
,
"Sex"
:
"男"
,
"Age"
:@22}
NSMutableDictionary *mutableDic = [myProfile mutableCopy];
//传统访问方式
NSString *name = [mutableDic objectForKey:@
"Name"
];
// "kuntzuo"
//新方法访问
NSString *myName = mutableDic[@
"Name"
];
//"kuntzuo"
//新方法修改
mutableDic[@
"Name"
] = @
"kuntian zuo"
;