6

と dict[key]NSDictionaryの両方を使用してアクセスできることに気付きましたか?objectForKey:

NSDictionary *coordsDict = @{@"xpos": @5.0, @"ypos": @7.2, @"zpos": @15.7};
NSLog(@"XPOS: %@", coordsDict[@"xpos"]);
NSLog(@"XPOS: %@", [coordsDict objectForKey:@"xpos"]);

これがずっと私から隠れていたのか、それともかなり最近の言語の変更なのか、誰か教えてもらえますか?

編集:質問は一般的に新しい文字列リテラルを参照するのではなく、より具体的には、NSArray に使用するのと同じ文字列リテラル構文で NSDictionary にアクセスすることを指します。私は明らかにこれを見落としており、この特定の構文がいつ追加されたかを確認したかっただけです。

4

2 に答える 2

13

これは Xcode 4.4+ に新たに追加されたもので、Apple の LLVM+Clang コンパイラに依存しています。これは新しい機能です :) 配列にも同じ表記法でアクセスできます: myObjectArray[4].

この新しい機能を独自のクラスに追加する (サブスクリプトと呼ばれる) ことに興味がある場合は、実装できるメソッドがいくつかあります。

@interface NSArray(Subscripting)
- (id)objectAtIndexedSubscript:(NSUInteger)index;
@end

@interface NSMutableArray(Subscripting)
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)index;
@end

@interface NSDictionary(Subscripting)
- (id)objectForKeyedSubscript:(id)key;
@end

@interface NSMutableDictionary(Subscripting)
- (void)setObject:(id)obj forKeyedSubscript:(id <NSCopying>)key;
@end

これらのメソッドのいずれかを独自のクラスに実装する場合は、それらに添字を付けることができます。これは、この機能を OS X 10.7 に追加する方法でもあります!

于 2013-02-14T15:41:10.613 に答える
0

iOS6で導入された「ModernObjective-C」を参照してください。

WWDC 2012ビデオ:ModernObjective-Cへの移行を参照してください。

だから、いいえ、機能は本当に新しいものではなく、あなたはそれを見落としています... ;-)

于 2013-02-14T15:41:49.107 に答える