2012-01-25 5 views
0

私が継承したプログラムのいくつかのコードを理解する上で問題があります。目的Cキーワード 'in'

CGPoint tapLocation = [gesture locationInView:self.view]; 
for (UIView *view in self.view.subviews){ 
    if (!CGRectContainsPoint(view.frame, tapLocation)){ 
     //do something 
    } 
} 

問題は「in」というキーワードが何をしているのかわかりません。私は周りを探索して、それにあいまいな参照とpost hereしか見つけることができません。私は本当にこれは上記のコードに適用されるかが表示されない

in: argument is an input argument only and won’t be referenced later 

ポストはと言います。どんな助けでも大歓迎です。

答えて

1

あなたが見ている "in"には、Fast Enumerationの一部があります。

Here is some documentation for it.

EDIT:そして、デレクは、以下の彼のコメントにドキュメントの別のビットを指摘しました。

+0

リンクがアクティブではないようです。私はMac Cocoa Core Competenciesのドキュメントを見てきましたが、これは現在最も関連性の高いドキュメントです:https://developer.apple.com/library/mac/documentation/General/Conceptual/DevPedia-CocoaCore/Enumeration.html Fastの説明Enumeration: "Fast Enumeration - コレクションクラスを含むいくつかのCocoaクラスは、NSFastEnumerationプロトコルを採用しています。標準的なC forループと似た構文を使用して、インスタンスが保持する要素を取得するために使用します。" –

1

これは、コレクションを繰り返すための簡潔な方法です。それは言う:

for (object in collection) 

これは、 "このコードはコレクション内のオブジェクトごとに1回発生する"ことを意味します。

3

リンゴはこれをfast enumerationと呼びます。

他の言語でも、同様の機能が「for each」ループによって提供されます。

+0

ありがとう!私は年齢のための答えを探していました!これはスタックオーバーフローに関する私の最初の投稿です。答えがどれくらい早く来たかは信じられません。 –

+0

ええと... 7つの答えは、ほぼ完全に同じです。 –

+0

私は知っている!彼らは私がコメントを書くことができるよりも早く来ていた。答えをみんなにありがとう。 –

0

コレクションの反復処理ができるように自動的に列挙子を作成します。したがって、コレクションはNSFastEnumerationに準拠する必要があります。

0

inは、アレイを介してそれを使用する。例えば

0
NSArray *values = [NSArray arrayWithObjects:@"val1", @"val2", @"val3", nil]; 
    for (NSString *val in values) { 
      NSLog(@"Value = '%@'", val); 
    } 

は基本的に、これはObjective-Cのために構築されたため、ループの拡張です。このように、このコードの 考える:実際の実装ではない整数可変ループを有するため、NSEnumeratorを使用すること

for (NSArray *arr = UIViewGetSubviews(UIViewControllerGetView(self)), i = 0; i < arr.count; i++) { 
} 

注意。あなたがあなたの質問に指定したリンクで

+0

NSEnumeratorを使用せず、NSFastEnumerationの実現を使用します。これらの2つの実装とパフォーマンスには大きな違いがあります。 –

1

ためのループでとは全く異なっています。農家はの@encodingとなり、後者はループのとなります。 forループこの種のために、それぞれ一般にループと呼ばれ、Objective-Cでそれが高速列挙呼ばれます。