私は最近、何か奇妙なことがobjective-cで機能しているように見えることに気づきました。
アレイがある場合、
NSArray *myArray = @[@"1", @"b", @"3", @"d"];
通常は2番目の要素にアクセスできます。
NSString *element = [myArray objectAtIndex:1]; // second element
しかし、私は今それを介してそれにアクセスすることもできるようです。
NSString *element = myArray[1];
これが現在定義された動作であり、したがって安全に使用できるかどうかを誰かが知っていますか、それとも避けるべきですか?助けてくれる人に感謝します!!
この構文はClang 3.3で追加されました: Objective C Literals 。基本的に、コンパイラーはobjCObj[idx]
型の式を式[objCObj objectAtIndexedSubscript:idx]
に変換します。辞書にも使用でき、独自のオブジェクトに自由に採用できます。
そのため、最新バージョンのObjective Cと適切に更新されたObjective Cコンパイラ(Clangなど)を使用する場合は、完全に安全に使用できます。
これはobjective-cの新機能であり、xCode 4.5以降で利用可能です
この構文を使用しても安全です。独自のクラスでこれをサポートすることもできます。
これは、LLVMコンパイラの最新バージョンに完全に有効なコードです。これまでのところ、他のコンパイラ(GCCなど)では無効です。
あなたがそれを避けるべきかどうか-まあ、それは好みの問題です。索引付けの動作は少し異なるため、インターネット上ではいくつかの大きな議論があります(それを実装するためにまったく異なる方法が使用されます)。また、式のリテラルを使用するかどうかについても検討します。コードを読みにくくする場合があるためです(たとえば、リテラルのように書かれていますが、実際には自動解放されたオブジェクトです)。すべてがリテラルを使用して行われることに注意してください単純なマクロを使用して行うことができます。