天天看點

第三條:多使用字面量文法

應該使用字面量文法來建立字元串,數值,數組,字典。

應該通過取下标操作來通路數組下标或是字典中的鍵所對應的元素。

我們經常用到的有Foundation架構中的NSString,NSNumber,NSArray,NSDictionary。

這條經驗告訴我們要多使用字面量來建立上述這些類。

比如說NSString,何為字面量建立呢?

@"hello"; //這就是一個字面量
NSString* words = @"how are you!";
           

像上面這樣的建立方式就叫做使用字面量建立。

NSString* words = [[NSString alloc]init...];
           

相比這樣的建立方式,上面那種有何好處呢?

1.縮減代碼量;

2.使代碼更加易讀,簡潔。

實際上,當我們直接使用字面量文法的時候,都是程式在背後幫我們進行了alloc init方式的建立。這被稱為是“文法糖”。

文法糖:指計算機語言中與另外一套文法等效,但是開發者使用起來更加友善的文法。

接下來将要描述的其他三個類都有着這樣的文法。

Wait!

還有一條關于NSString的小技巧。在C++中我們知道,可以使用字面量拼接的文法。像是這樣:

const char* str = "hello" "word";
           

那麼在OC中呢?同樣也可以使用這樣的文法。

NSString* strs =  @"hello" @"world";
NSString* strs1 = @"hello" "world";
NSString* strs2 = @"hello"
                  @"world"
                   "!";
           

至于具體可以用到哪些地方呢?資料庫查詢語算是一個,可以分成好幾行,使代碼更加清晰。

NSNumber

将基本資料類型放到數組或是字典中的時候,我們就需要對其進行包裝成類。

若不使用字面量,則是

NSNumber* num = [NSNumber numberWithInt:123];
           

如果使用字面則隻需要:

NSNumber* num1 = @1;
NSNumber* num2 = @3.14;
NSNumber* num3 = @YES;
NSNumber* num4 = @'a';
...
           

就是這麼easy,一眼就看到了具體數值。

NSArray:

一般建立方法及取下标方法:

NSArray* arr =[NSArray arryWithObjects:@"tom",@"jeny",@"frank",nil];
           
[arr objectAtIndex:1];
           

使用字面量:

NSArray* arr = @[@"tom",@"tim",@"frank"];
           
arr[1];
           

這種方式不僅簡單易寫,還有利于操作數組。

注意:我們在使用字面量建立數組的時候,如果插入的某個對象為nil,則會報錯。正是如此我們在使用字面量建立數組的時候可以更早的發現錯誤。如果使用本身的方法建立的,則會在遇到nil時結束添加,而不會報錯,這樣會導緻數組元素數量變少。不容易及時發現。

NSDictionary

NSDictionary *personData=[NSDictionary dictionaryWithObjectsAndKeys:
@"Matt",@"firstName",@"Galloway",@"lastName",[NSNumber numberWithInt:28],@"age",nil];
           

這樣key在後obj在前的方式貌似有點反邏輯?而且整個代碼還很備援的感覺。

使用了字面量之後:

NSDictionary *personData = @{@"firstName":@"Matt",@"lastName":@"Galloway",@"age":@28};
           

瞬間清爽了!是吧?

同樣的這樣的添加方法也會在有對象為nil時報錯,有助于查錯;而是用本身的方法則不會。

通路key的具體内容呢?

NSString *lastName=[personData objectForKey:@"lastName"];
           
NSString *lastName=personData[@"lastName"];
           

哪個更好用一比便知。

要明白的: 

1.字面量文法是很好用,但是僅限于Foundation架構内的對象才行,自定義對象是不行的哦。好在這個架構裡的對象已經基本涵蓋我們所需要的對象了。

2.使用字面量建立出來的字元串,數組,字典對象都是不可變的,如需要可變版本則需要使用mutablecopy方法。

但是總的來說,使用字面量的優點大于它的瑕疵。