Что означает индекс в квадратных скобках после NSArray?

Работа с iTunes U Разработка приложений для iOS 7 для iPhone и iPad, а также слайдов лекции 3 на стр. 120, есть вопрос викторины, в котором задается вопрос о том, что делает следующая строка кода. Честно говоря, я немного озадачен и надеялся, что кто-то может сломать это.

cardA.contents = @[cardB.contents,cardC.contents][[cardB match:@[cardC]] ? 1 : 0];

Итак, я получил первую часть, cardA.contents = новый массив с cardB.contents а также cardC.contents в массиве. Но затем следует (я думаю,??) индекс, который возвращает 1 или 0 в зависимости от того, cardB соответствует массиву, который включает cardC,

Вот что я не "получаю", и, возможно, это просто проблема с синтаксисом.... что это делает?

Как

cardA.contents = @[cardB.contents,cardC.contents][0];

или же

cardA.contents = @[cardB.contents,cardC.contents][1];

Действительно? Или я что-то пропустил?

2 ответа

Решение

Ваше понимание совершенно правильно; вам просто не хватает одного бита синтаксиса. Подписной доступ NSArrayс array[index] form является частью функции "коллекции литералов", представленной Clang некоторое время назад.

Он трансформируется компилятором в вызов [array objectAtIndexedSubscript:index],

Как обычно, в написании этого есть смысл. Буквально говорится, что если cardB соответствует cardC, используйте индекс [1] (cardC), если нет, используйте индекс [0] (cardB)

Так,

cardA.contents = cardB.contents // if does NOT match
cardA.contents = cardC.contents // if matches

(на основе индекса).

Дух.. Извините за глупый вопрос...

Другие вопросы по тегам