Что делает вопросительный знак и двоеточие (?: тернарный оператор), означают в цели-c?

Что означает эта строка кода?

label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;

? и : смутите меня.

265
задан Forge 6 January 2017 в 22:45
поделиться

6 ответов

Это тернарный оператор C (Objective-C является надмножеством C):

label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;

семантически эквивалентен

if(inPseudoEditMode) {
 label.frame = kLabelIndentedRect;
} else {
 label.frame = kLabelRect;
}

Тернар без первого элемента (например, variable?: AnotherVariable ) означает то же, что и (valOrVar! = 0)? valOrVar: другойValOrVar

426
ответ дан 23 November 2019 в 02:26
поделиться

Это просто обычный тернарный оператор . Если часть перед вопросительным знаком истинна, она оценивает и возвращает часть перед двоеточием, в противном случае она оценивает и возвращает часть после двоеточия.

a?b:c

похоже на

if(a)
    b;
else
    c;
13
ответ дан 23 November 2019 в 02:26
поделиться

Это часть C, поэтому она не зависит от Objective-C. Вот перевод оператора if :

if (inPseudoEditMode)
    label.frame = kLabelIndentedRec;
else
    label.frame = kLabelRect;
4
ответ дан 23 November 2019 в 02:26
поделиться

Это просто краткая форма написания оператора if-then-else. Это означает то же самое, что и следующий код:

if(inPseudoEditMode)
  label.frame = kLabelIndentedRect;
else
  label.frame = kLabelRect;
4
ответ дан 23 November 2019 в 02:26
поделиться

Это тернарный или условный оператор. Его основная форма:

condition ? valueIfTrue : valueIfFalse

Где значения будут оцениваться, только если они выбраны.

175
ответ дан 23 November 2019 в 02:26
поделиться

Основываясь на превосходном объяснении Барри Уорка ...

Что так важно в тернарном операторе, так это то, что его можно использовать в местах, где оператор if- иначе не может. т.е. внутри параметра условия или метода.

[NSString stringWithFormat: @"Status: %@", (statusBool ? @"Approved" : @"Rejected")]

... что отлично подходит для констант препроцессора:

// in your pch file...
#define statusString (statusBool ? @"Approved" : @"Rejected")

// in your m file...
[NSString stringWithFormat: @"Status: %@", statusString]

Это избавляет вас от необходимости использовать и выпускать локальные переменные в шаблонах if-else. FTW!

36
ответ дан 23 November 2019 в 02:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: