@literals(簡寫)
NSNumber
[NSNumber numberWithChar:‘X’]簡寫為 @‘X’;
[NSNumber numberWithInt:12345] 簡寫為 @12345
[NSNumber numberWithUnsignedLong:12345ul] 簡寫為 @12345ul
[NSNumber numberWithLongLong:12345ll] 簡寫為 @12345ll
[NSNumber numberWithFloat:123.45f] 簡寫為 @123.45f
[NSNumber numberWithDouble:123.45] 簡寫為 @123.45
[NSNumber numberWithBool:YES] 簡寫為 @YES
NSDictionary
[NSDictionary dictionary] 簡寫為 @{}
[NSDictionary dictionaryWithObject:o1forKey:k1] 簡寫為 @{ k1 : o1 }
[NSDictionarydictionaryWithObjectsAndKeys:o1, k1, o2, k2, o3, k3, nil]
簡寫為 @{ k1 : o1, k2 : o2, k3 : o3 }
當寫下@{ k1 : o1, k2 : o2, k3 : o3 }時,實際的代碼會是
// compiler generates:
id objects[] = { o1, o2, o3 };
id keys[] = { k1, k2, k3 };
NSUInteger count = sizeof(objects) / sizeof(id);
dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys count:count];
NSArray
[NSArray array] 簡寫為 @[]
[NSArray arrayWithObject:a] 簡寫為 @[ a ]
[NSArray arrayWithObjects:a, b, c, nil] 簡寫為 @[ a, b, c ]
比如對于@[ a, b, c ],實際編譯時的代碼是
// compiler generates:
id objects[] = { a, b, c };
NSUInteger count = sizeof(objects)/ sizeof(id);
array = [NSArray arrayWithObjects:objects count:count];
Mutable版本和靜態版本上面所生成的版本都是不可變的,想得到可變版本的話,可以對其發送-mutableCopy消息以生成一份可變的拷貝。
例如一下代碼:盡管使用NSMutableAarray 來存儲初始化的數組,但是planets并不是可變數組,即planet不是mutable版本,如果對palnet進行修改,會異常:
NSMutableArray* planets = @[
@"Mercury",
@"Venus",
@"Earth",
@"Mars",
@"Jupiter",
@"Saturn",
@"Uranus",
@"Neptune"
];
我們可以通過對簡寫初始化的NSArray不可變版本進行一個mutable的拷貝,就可以獲得一份可變拷貝,如下代碼所示:
NSMutableArray* mutablePlanets = [@[
@"Mercury",
@"Venus",
@"Earth",
@"Mars",
@"Jupiter",
@"Saturn",
@"Uranus",
@"Neptune"
] mutableCopy];
另外,對于標記為static的數組,不能使用簡寫為其賦值(其實原來的傳統寫法也不行)。
如果直接賦值就會提示出錯
Paste_Image.png