2013-07-31 2 views
1

В примере кода Objective-C Я нашел этот операторЧто такое: оператор

self.itemViews[@(0)] ?: [self.dataSource slidingViewStack:self viewForItemAtIndex:0 reusingView:[self dequeueItemView]]; 

Код компилируется под Apple, LLVM 4.2.

Единственное, с чем я столкнулся, это быть векторным оператором, но я не думаю, что Objective-C и, если на то пошло, C, имеют векторные операторы. Так кто-то может дать ссылку и/или документацию этого оператора.

ответ

5

?: является C условный оператор.

a ? b : c 

дает b значение, если a отличается от 0 и c, если a равно 0.

гну расширение (Conditional with Omitted Operand) позволяет использовать его без второго операнда:

x ? : y 

эквивалентно

x ? x : y 
+0

Это правильно, но на самом деле не объясняет, что происходит. В этом случае, если 'self.itemViews [@ (0)]' равно nil, источник данных используется для установки значения. –

+0

Но это единственный ответ, говорящий о том, что?: Является расширением GNU – NebulaFox

+0

@NebulaFox См. [Запись в Википедии для?:] (Http://en.wikipedia.org/wiki/%3F:#C) –

1

Это ternary operator, так как Objective-C является надмножеством C, вы можете использовать этот оператор.

tutorial по этому вопросу.

a = x? : y;

выражение эквивалентно

а = х? x: y;

2

Вы знакомы с Ternary operator? Обычно видели в стиле:

test ? result_a : result_b; 

Все, что произошло здесь в том, что первая ветвь не было дано так что ничего не будет происходить в положительном случае. Аналогично следующее:

test ?: result_b; 

Благодаря тому, как C вычисляется, это вернет result_b если тест untruthy, в противном случае он будет возвращать test.

В примере, который вы указали, - если вид отсутствует, он возвращается к проверке источника данных, чтобы предоставить заменяющее значение.

1

Это? оператор, называемый тройной оператор, который используется следующим образом:

condition ? true-branch : false-branch; 

Когда условие принимает значение TRUE (не ноль), ветвь перед : выполняется, в противном случае другая ветвь выполнена.Это может даже возвращать значение:

value = condition ? true-branch : false-branch; 

В вашем случае возвращаемое значение опущен и истинный Гиса пуст (ничего не делать). Возвращаемое значение condition возвращается, но не используется в вашем примере.

Эквивалент

if (!self.itemViews[@(0)]) 
    [self.dataSource slidingViewStack:self viewForItemAtIndex:0 reusingView:[self dequeueItemView]]; 

, который имхо гораздо лучше стиль программирования.

1

Вышеупомянутый термин Тернарный оператор или условный оператор.

Синтаксис,

 <condition>?<true_part>:<false_part> 

Здесь, если условие истинно, будет рассматриваться как значение еще будет рассматриваться в качестве значения.

Пожалуйста, обратитесь это, http://en.wikipedia.org/wiki/%3F:

+0

В чем преимущество ссылки на символ вопроса? – NebulaFox

+0

это один строковый код с if then else feature. Сохраняет много кодирования – Sahana

+0

Я не добавлял 8 пробелов перед кодом. поэтому он оказался в появлении?: хотя код показан выше. Извините за отсутствие проверки – Sahana

1

Этот оператор используется в Objective C и этот оператор используется для условной operator.Whether будет выполняться один оператор или в то время как другие, это зависит от логического термина, который используется и ввод, который вы предоставляете.

Смежные вопросы