私は趣味でコーディングをときどきいじるのが好きで、Apple Developer ドキュメントのいくつかに見慣れない構文があることに気付きました。
newSectionsArray[index]
私は通常、次のようなものを期待しています:
[object method]
誰かが私にこれを説明できますか?
ありがとう!
私は趣味でコーディングをときどきいじるのが好きで、Apple Developer ドキュメントのいくつかに見慣れない構文があることに気付きました。
newSectionsArray[index]
私は通常、次のようなものを期待しています:
[object method]
誰かが私にこれを説明できますか?
ありがとう!
here で説明されているように、オブジェクトの添字と呼ばれます
その構文糖、として
newSectionsArray[index]
コンパイラによって翻訳されます
[newSectionsArray objectAtIndexedSubscript:index];
NSDictionary
添字も実装しているので、次の方法で要素にアクセスできます。
dictionary[@"key"]
クールな (そして潜在的に危険な) 機能は、これが一般化されているため、独自のクラスで使用することもできます。
いくつかのメソッドを実装するだけです
(索引付きアクセスの場合)
- (id)objectAtIndexedSubscript:(NSUInteger)idx;
- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx;
または (キー付きアクセスの場合)
- (id)objectForKeyedSubscript:(id)key;
- (void)setObject:(id)obj forKeyedSubscript:(id)idx;
カスタムクラスのインスタンスでブラケット表記を使用するたびに、それらが呼び出されます。
したがって、グリッドベースのゲームをコーディングし、グリッド上の要素にアクセスすることになる可能性があります。
board[@"B42"]; // => [board objectForKeyedSubscript:@"B42"]
またはボード上のピースを移動する
board[@"C42"] = @"Troll"; => [board setObject:@"Troll" forKeyedSubscript:@"C42"];
素晴らしいですが、私はそれを悪用しません。
これは Clang 3.4 で導入されたリテラル構文です。ただし、古い構文を使用できます[newSectionsArray objectAtIndex:index]
。それは同じことです。
newSectionsArray
おそらく配列 (つまり、同じ型の複数のオブジェクトの連続したブロック) とindex
整数です。newSectionsArray[index]
位置にあるオブジェクトを提供しますindex
(0 から数え始めます)。