3.多用字面量語法,少用與之等價的方法
阿新 • • 發佈:2018-12-22
使用字面量語法(literal syntax)可以縮減原始碼長度,使其更易讀。
- 字面數值
有時需要把整數、浮點數、布林值封入 OC 物件中,這種情況下可以用 NSNumber 類,該類可以處理多種型別的數值。
// 不用字面量,建立一個數字
NSNumber *someNumber = [NSNumber numberWithInt:1];
// 使用字面量
NSNumber *someNumber = @1;
NSNumber 例項表示的所有資料型別都可使用該語法,程式碼:
NSNumber *intNumber = @1; NSNumber *floatNumber = @2.5f; NSNumber *doubleNumber = @3.1415; NSNumber *boolNumber = @YES; NSNumber *charNumber = @'a';
字面量表示數值可以令 NSNumber 物件變得整潔(因為宣告中只包含數值,而沒有多餘的成分)。
- 字面量陣列
// 不使用字面量語法建立陣列,取下標操作 NSArray *animals = [NSArray arrayWithObjects:@"cat", @"dog", @"monkey", nil]; NSString *dog = [animals objectAtIndex:1]; // "arrayWithObjects:" 方法會依次處理各個引數,直到發現 nil // 字面量語法 NSArray *animals = @[@"cat", @"dog", @"monkey"]; NSString *dog = animals[1]; //“取下標”(subscripting)操作
注意:字面量語法建立陣列時,若陣列元素物件中有 nil,會丟擲異常。
原因:字面量語法實際上只是一種“語法糖”,其效果等於先建立一個數組,然後把方括號內的所有物件都加到這個陣列。
字面量語法更安全:丟擲異常令應用程式終止,比建立好陣列後才發現元素個數少了好。向陣列中插入 nil 通常說明程式有錯。
- 字面量字典
// 不使用字面量語法定義的字典,取值操作 NSDictionary *personData = [NSDictionary dictionaryWithObjectsAndKeys: @"Thomas", @"firstName", @"Jefferson", @"lastName", [NSNumber numberWithInt:28], @"age", nil]; NSString *firstName = [personData objectForKey:@"firstName"]; // 字面量語法定義 NSDictionary *personData = @{ @"firstName" : @"Thomas", @"lastName" : @"Jefferson", @"age" : @28 }; NSString *firstName = personData[@"firstName"];
注:字典中的物件和鍵必須都是 OC 物件,不能把整數直接放進去,要封裝成 NSNumber 例項。
字面量定義的字典,若值為 nil,也會丟擲異常。
- 可變陣列與字典
[mutableArray replaceObjectAtIndex:1 withObject:@"dog"];
[mutableDictionary setObject:@"Hello" forKey:@"lastName"];
// 下標操作
mutableArray[1] = @"dog";
mutableDictionary[@"lastName"] = @"Hello";
- 侷限性
字面量語法侷限:除了字串,所建立物件必須屬於 Foundation 框架。
使用字面量語法建立的字串、陣列、字典物件都是不可變的(immutable),若想變成可變的,需複製一份,例如:
NSMutableArray *mutable = [@[@"cat", @"dog", @"monkey"] copy];
要點:
- 使用字面量語法來建立字串、數值、陣列、字典,與常規方法相比更加簡明扼要。
- 通過取下標操作訪問陣列下標或字典中的鍵所對應的元素。
- 用字面量語法建立陣列或字典時,值中有 nil 會丟擲異常。
語法糖(syntactic sugar):也稱“糖衣語法”,計算機語言中與另一套語法等效但是開發者用起來卻更加方便的語法。語法糖可令程式更易讀,減少程式碼出錯概率。
作者:對歌當酒
連結:https://www.jianshu.com/p/85e874884606
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。