web-dev-qa-db-ja.com

NSArray objectAtIndex:省略形

重複の可能性:
Objective-Cにリテラル辞書または配列構文はありますか?

私は最近、何か奇妙なことがobjective-cで機能しているように見えることに気づきました。

アレイがある場合、

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

通常は2番目の要素にアクセスできます。

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

しかし、私は今それを介してそれにアクセスすることもできるようです。

NSString *element = myArray[1];

これが現在定義された動作であり、したがって安全に使用できるかどうかを誰かが知っていますか、それとも避けるべきですか?助けてくれる人に感謝します!!

24
George Green

この構文はClang 3.3で追加されました: Objective C Literals 。基本的に、コンパイラーはobjCObj[idx]型の式を式[objCObj objectAtIndexedSubscript:idx]に変換します。辞書にも使用でき、独自のオブジェクトに自由に採用できます。

そのため、最新バージョンのObjective Cと適切に更新されたObjective Cコンパイラ(Clangなど)を使用する場合は、完全に安全に使用できます。

29
Adam Wright

これはobjective-cの新機能であり、xCode 4.5以降で利用可能です

この構文を使用しても安全です。独自のクラスでこれをサポートすることもできます。

4
Jonathan Cichon

これらの構文を使用しても安全です。

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

この記事で他のオプションを確認できます: ObjectiveCLiterals

2
Midhun MP

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

あなたがそれを避けるべきかどうか-まあ、それは好みの問題です。索引付けの動作は少し異なるため、インターネット上ではいくつかの大きな議論があります(それを実装するためにまったく異なる方法が使用されます)。また、式のリテラルを使用するかどうかについても検討します。コードを読みにくくする場合があるためです(たとえば、リテラルのように書かれていますが、実際には自動解放されたオブジェクトです)。すべてがリテラルを使用して行われることに注意してください単純なマクロを使用して行うことができます。

2
Sulthan