iOS字面量的簡(jiǎn)單使用
字面量是蘋(píng)果在2012年的開(kāi)發(fā)者大會(huì)出現(xiàn)的新特性之一. 可以幫助程序員更加高效的編寫(xiě)代碼. 在XCode4.4以后可以使用.
1. 數(shù)字(NSNumber)
簡(jiǎn)化前的寫(xiě)法:
NSNumber *value;
value = [NSNumber numberWithInt:123];
value = [NSNumber numberWithFloat:123.45f];
value = [NSNumber numberWithDouble:123.45];
value = [NSNumber numberWithBool:YES];
簡(jiǎn)化后的寫(xiě)法:
NSNumber *value;
value = @123;
value = @123.45f;
value = @123.45;
value = @YES;
裝箱表達(dá)式也可以采用類似的寫(xiě)法:
NSNumber *piOverSixteen = [NSNumber numberWithDouble:(M_PI / 16)];
NSString *path = [NSString stringWithUTF8String:getenv("PATH")];
簡(jiǎn)寫(xiě)后:
NSNumber *piOverSixteen = @(M_PI / 16);
NSString *path = @(getenv("PATH"));
UI有字符串表達(dá)式來(lái)說(shuō), 需要注意, 表達(dá)式的值一定不能是NULL, 否則系統(tǒng)會(huì)拋出異常.
2. 數(shù)組(NSArray)
數(shù)組的初始化方法有很多, 這里就不再一一羅列, 直接看新的寫(xiě)法.
NSArray *array;
array = @[]; // 空數(shù)組
array = @[@"a"]; // 一個(gè)對(duì)象的數(shù)組
array = @[@"a", @"b", @"c"]; // 多個(gè)對(duì)象的數(shù)組
需要注意的是如果, 有對(duì)象為nil的話, 運(yùn)行時(shí)系統(tǒng)會(huì)拋出異常.
3. 字典(NSDictionary)
字面量寫(xiě)法:
NSDictionary *dic;
dic = @{}; // 空字典
dic = @{k1 : v1}; // 包含一個(gè)鍵值對(duì)的字典
dic = @{k1 : v1, k2 : v2, k3: v3}; // 包含多個(gè)鍵值對(duì)的字典
4. 下標(biāo)法與容器類
可以通過(guò)下標(biāo)的方式存取數(shù)組和字典的數(shù)據(jù).
對(duì)于數(shù)組:
NSArray *array = @[@"a", @"b", @"c"];
// 通過(guò)下標(biāo)方式獲取數(shù)組對(duì)象, 替換原有寫(xiě)法: [array objectAtIndex:i];
id obj = array[i];
// 也可以直接維數(shù)組對(duì)象賦值.替換原有寫(xiě)法
array[i] = newObj;
對(duì)于字典:
NSDictionary *dic = @{k1 : v1, k2 : v2, k3: v3}; ;
// 獲取v2對(duì)象, 替換原有寫(xiě)法: [dic objectForKey:k2];
id obj = dic[k2];
// 重新為鍵為k2的對(duì)象賦值
dic[k2] = newObj;
5. 容器類數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)化的限制
采用上述寫(xiě)法構(gòu)建的容器都是不可變的, 如果需要生成可變?nèi)萜? 可以傳遞-mutableCopy消息. 例如:
NSMutableArray *mutablePlants = [@[@"Mercury", @"venus", @"Earth"] mutableCopy];
NSMutableArray *mutablePlants = @[@"Mercury", @"venus", @"Earth"].mutableCopy;
總結(jié)
- 盡量使用對(duì)象字面量語(yǔ)法創(chuàng)建字符串, 數(shù)字, 數(shù)組和字典等.
- 在數(shù)組和字典中, 要使用關(guān)鍵字和索引做下標(biāo)來(lái)獲取數(shù)據(jù)
- 使用對(duì)象字面量語(yǔ)法時(shí), 容器類里不可是nil, 否則運(yùn)行時(shí)貴拋出異常.