Objective-C literal 宣告物件内容
在之前物件宣告必需要先配置记忆体空间再进行初始化动作:
NSString *string = [[NSString alloc] initWidthString:@"i am String"]];
Objective-C 1.0时已经增加字面宣告(literal)的方式,它代表的就是不需要覆杂的方式进行物件的宣告,不过当时只有支援NSString:
NSString *literalString = @“i am String literal”;
现在增加支援NSNumber、NSArray、NSDictinoary。这些宣告方式整体看来也更容易阅读也减少了原始码大小,接下来我们就来看一下这几种是如何去建立:
NSNumber
原来:
NSNumber *demoNumber = [NSNumber numberWithInt:1234];
字面宣告(literal):
NSNumber *demoNumber = @1234;
NSNumber各种型别也是可以:
NSNumber *intNumber = @1234; //[NSNumber numberWithInt:1234] NSNumber *floatNumber = @1234.02f; //[NSNumber numberWithFloat:1234.02f] NSNumber *mathematicsNumber = @1.23402e23; //[NSNumber numberWithFloat:1.23402e23] NSNumber *boolNumber = @“YES”; //[NSNumber numberWithBool:YES] NSNumber *charNumber = @"Y"; //[NSNumber numberWithChar:'Y']
强制转换
字面宣告(literal)是一个概念,但还是需要编译器的配合,下面是字面宣告(literal)针对变数的操作方式:
float version =1.0f NSNumber *versionNumber = @(version); //[NSNumber numberWithFloat:version]
利用字面宣告(literal)@(内容)
的原理,将C宣告内容使用字面宣告(literal)的方式强制转换成Number物件,但要清楚被转换的变数要能转成数值的才行。
NSArray
NSArray也是支援,当然活用性就更高了,依照之前例子加上NSArray未使用字面宣告(literal)方式:
NSArray *mathematicsNumberArray = [NSArray arrayWithObjects:@1234,@1234.02f,@1.23402e23,nil];
其实支援literal后,还能更简洁,宣告时要使用@[...]
格式规则,其中每个元素用,
格开:
NSArray *mathematicsNumberArray = @[@1234,@1234.02f,@1.23402e23];
NSString使用字面宣告(literal)加入NSArray:
NSArray *stringArray = @[@“123”,@“ABC”,@“OO”];
混用:
NSArray *array = @[ @"ABC", @123 ];
上述所提供的都是设定初始值,不过在NSArray还可以支援取值的方式,承上个例子, 如果要取得第一个NSArray值会是: 原来方式:
NSArray *stringIndex1= [stringArray objectAtIndex:1];
literal:
NSString *string1= stringArray[1];
NSDictionary
NSDictionary 原本宣告方式相常的覆杂,且要先输入值(Value)再输入键值(Key):
NSDictionary *keyvalueDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@“value1”, @“key1”,@“value2”, @"key2”,@“value3”, @"key3”,nil];
NSDictionary使用字面宣告(literal)必需被@{....}
框住,填入顺序先key再vale
为一组,key与value中间使用:
隔开,每组每组间用,
隔开:
NSDictionary *keyvalueDictionary = @{@“key1”:@“keyvalue1”,@“key2”:@“keyvalue2”:@“key2”,@“keyvalue3”};
但上面例子所宣告的NSDictionary结构属于不可变(immutable),无法动态的增加新的键值组,如果你是要宣告成mutable方式要在后面加上mutablecopy:
NSMutableDictionary *keyvalueDictionary = [@{@“keyvalue1”,key1,@“keyvalue2”,key2,@“keyvalue3”,key3} mutablecopy];
–
前面所提到的都是使用literal宣告方式的方法,但这些方法在NSDictionary与NSArray的宣告时就会发挥较好的作用,下面再来看覆杂一点的NSDictionary:
NSDictionary keyvalueDictionary1 = @{@“key1”,@“keyvalue1”,@“key2”,@[@-1234.12, @12345],@“key2”,@“keyvalue3”};
在NSDictionary中的值宣告NSArray的NSNumber物件,使用上比以往来的简便一些。
参考资料
New Objective-C Literal Syntax for NSArray, NSDictionary
更新日志
日期 | 内容 |
---|---|
2017/06/06 | 更新内容及范例 |
2014/01/10 | 初版 |
关键字
- 使用Objective-C literal来宣告初始值
- Objective-C literals