Цель C Ключевое слово «в» - PullRequest
0 голосов
/ 25 января 2012

У меня возникли проблемы с пониманием некоторого кода в программе, которую я унаследовал.

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

Проблема в том, что я понятия не имею, что делает ключевое слово in. Я искал вокруг и могу найти только неясную ссылку на него и пост здесь .

В посте говорится, что:

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

Я не очень понимаю, как это относится к приведенному выше коду. Любая помощь будет принята с благодарностью.

Ответы [ 7 ]

3 голосов
/ 25 января 2012

Я думаю, что Apple называет это быстрое перечисление .

В других языках аналогичные функциональные возможности обеспечиваются циклом «для каждого».

1 голос
/ 25 января 2012

в в ссылке, указанной вами в вашем вопросе, полностью отличается от в в для петли. Фермер относится к @ encoding , а последний относится к контексту для циклов. Этот тип цикла для называется для каждого цикла в целом, а в Objective-C он называется быстрое перечисление .

1 голос
/ 25 января 2012

Это краткий способ перебора коллекции.Там, где написано:

for (object in collection)

, это означает, что «этот код выполняется один раз для каждого объекта в коллекции».

1 голос
/ 25 января 2012

"in", которое вы видите, является частью быстрого перечисления.

Вот некоторая документация для него.

РЕДАКТИРОВАТЬ: И Дерек указал на другую часть документации в своем комментарии ниже.

0 голосов
/ 25 января 2012

По сути, это расширение цикла for, созданного для target-c. Думайте об этом коде так:

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

Обратите внимание, что фактическая реализация использует NSEnumerator, а не for с целочисленной переменной loop.

0 голосов
/ 25 января 2012

in используется для итерации по массиву.

Например:

    NSArray *values = [NSArray arrayWithObjects:@"val1", @"val2", @"val3", nil];
    for (NSString *val in values) {
            NSLog(@"Value = '%@'", val);
    }
0 голосов
/ 25 января 2012

Он автоматически создает для вас перечислитель, так что вы можете выполнять итерацию по коллекции. Таким образом, коллекция должна соответствовать NSFastEnumeration.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...