LoginSignup
0
0

More than 5 years have passed since last update.

方便的玩意 - Objective-C's Object Literal

Posted at

Objective-C 的 object literal 已經出來很多年了,可以增進開發的進度、比較易讀,因此也用了很多年,筆記一下有哪些用法。

而這些 object literal ,前面都會跟著編譯器指令 @

編譯器指令:compiler directives

NSString

這是原本就一直存在的 literal ,用法很簡單

NSString *myString = @"Hello";

這樣即可。

NSNumber

NSNumber 本身具有 class cluster 的特性,初始化的時候就可以吃各種的基本型態:

NSNumber *integerNumber = [NSNumber numberWithInteger:76];
NSNumber *floatNumber = [NSNumber numberWithFloat:3.14];
NSNumber *boolNumber = [NSNumber numberWithBool:YES];

@

接著就可以換成

NSNumber *integerNumber = @76;
NSNumber *floatNumber = @3.14;
NSNumber *boolNumber = @YES;

用了 object literal 的方式後,更加容易識別參數的數值

NSArray

在 object literal 出來之前,NSArray 的初始化很麻煩:

NSArray *myArray = [NSArray arrayWithObjects:object1, object2, nil];

不只囉唆不易閱讀,最後面還要加的 nil 這個拖油瓶在後面。畢竟 ... NSArray arrayWithObjects: ... 雖然很容易讀懂我這個 method 要做什麼,但是對要初始化一個陣列,又變得似乎不太需要。

@[]

有了 object literal 之後,初始化一個陣列變得很簡單乾脆。

NSArray *myArray = @[object1, object2];

NSDictionary

NSDictionary 的話更難看出來塞了什麼資料,以下是他的建構方法(還有其他建構方式,請自行參照文件)

NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:key1, valueObject1, nil];

這時候不只容易搞混哪個是 key 、哪個是 value ,當塞入的參數一多,雖然可以透過分行來辨識,但是還是不是個很好的做法。

最後面一樣必須要有個 nil 這個拖油瓶。

@{}

有了 object literal 之後,使用 NSDictionary 的生活變得更簡單了。

NSDictionary *dictionary = @{key1: valueObject1, key2: valueObject2};

Box Expression - @()

最後一個就是 box expression

這個方法會用來動態產生一個物件,會自動判定 @([expression]) 中的 expression 結果的值是什麼,則動態回傳對應的型別,

例如

// 等於 [NSNumber numberWithInteger:(1+1)] ,會回傳一個 NSNumber 物件
NSNumber *number1 = @(1+1);

// 等於 [NSNumber numberWithInteger:(AnEnum)] ,放入 enum 時,也會回傳 NSNumber 物件
NSNumber *state = @(AnEnum);

// 等於 [NSValue valueWithCGRect:view.frame] ,這時候是放入 CGRect ,則會回傳 NSValue 物件
NSValue value = @(view.frame);

More Information

Objective-C Literals - Clang Documentation
@ - NSHipster

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0