NSString *str = @"Hello";。
現在NSNumber也可以這麼寫:
NSNumber *number = @'H';
number = @1.2;
number = @YES;
number = @(60 * 60 * 24);
如果寫了這一行程式
id x = @42;
結果看到以下報錯
lit.m:3:8: error: initializer element is not a compile- time constant
id x = @42;
^~~
這到底是為什麼?因為對於整數是不能像字符串那樣處理的;這只是個讓程序員方便的語法而已,能讓我們創建一個autoreleased 的NSNumber物件。在Objective-C 11中,如果你定義下面這樣的macro,代碼如下:
#define N(x) _Generic((x), \
int : [NSNumber numberWithInt: x], \
float : [NSNumber numberWithFloat: x], \
double : [NSNumber numberWithDouble: x])
這個例子接受一個數值參數然後返回一個NSNumber的物件,以下的代碼都是等價的
x = N(12);
x = @12;
x = N(42.5);
x = @42.5;
x = N(42.5f);
x = @42.5f;
同理你也可以為long, longS以及long doubleS等等來擴展這樣的macro。甚至是更加複雜的數據。
沒有留言:
張貼留言