2013-02-05 19 views
23

可能性の重複:
Is there some literal dictionary or array syntax in Objective-C?NSArrayのobjectAtIndex:速記

私は最近、奇妙な何かがObjective-Cで動作するように思われることに気づきました。

私は、アレイ、

NSArray *myArray = @[@"1", @"b", @"3", @"d"]; 

を持っているとき、私は今も経由でアクセスすることができるように見えるが、私は通常

NSString *element = [myArray objectAtIndex:1]; // second element 

、ことにより、第2の要素にアクセスすることができます。

NSString *element = myArray[1]; 

これは現在、定義された動作であるため、安全に使用することができますか、それとも避けるべきですか?助けることができる誰にも感謝!!

+0

申し訳ありませんが、それを検索する方法はあまりよくありませんでした。 –

+0

お返事ありがとうございます! :) –

答えて

28

この構文はClang 3.3で追加されました:Objective C Literals。基本的に、コンパイラはタイプobjCObj[idx]の式を式[objCObj objectAtIndexedSubscript:idx]に変換します。それは辞書のためにも機能し、あなたは自分のオブジェクトに自由にそれを採用することができます。

Objective Cと適切に更新されたObjective Cコンパイラ(Clang)の最新バージョンを使用していると仮定すると、あなたはそれを使用することを完全に安全です。

+0

アップルは速記の乱れを作った..何が起こったのか* "それが壊れていない場合は、それを修正しないでください" *? – Jacksonkr

4

これは、この構文を使用してその安全のXcode 4.5

以来、Objective-Cのと盛の新機能で、あなたも、このための独自のクラスのサポートを与えることができます。

2

これらの構文は安全です。

これらの構文はModern Objective-Cの一部です。

あなたはより多くのオプションについては、この資料を確認することができます。ObjectiveCLiterals

2

それはLLVMコンパイラの最新バージョンを完全に有効なコードです。 これまでのところ、他のコンパイラ(GCCなど)では無効です。

それを避けるべきかどうかは問われません。それは味の問題です。索引付けはわずかに異なります(実装には全く異なる方法が使用されるため)。 また、式のリテラルを使用するかどうかについては、コードを読みにくくする(例:リテラルのように書かれていますが、実際には自動リリースされたオブジェクトです)場合があるため、単純なマクロを使用してリテラルを使用してすべてを行うことに注意してください。