Что означает индекс в квадратных скобках после 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
(на основе индекса).
Дух.. Извините за глупый вопрос...