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