Что означает эта строка кода?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
?
и :
путают меня.
Что означает эта строка кода?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
?
и :
путают меня.
Это трёхмерный оператор <
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
семантически эквивалентно
if(inPseudoEditMode) {
label.frame = kLabelIndentedRect;
} else {
label.frame = kLabelRect;
}
Тернар без первого элемента (например, variable ?: anotherVariable
) означает то же самое, что и (valOrVar != 0) ? valOrVar : anotherValOrVar
Это тернарный или условный оператор. Это базовая форма:
condition ? valueIfTrue : valueIfFalse
Если значения будут оцениваться только в том случае, если они выбраны.
Строительство на Барри Wark отличное объяснение...
Что так важно в тройном операторе, так это то, что его можно использовать в тех местах, где if-else не может. т.е.: внутри параметра условия или метода.
[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!
Просто логика будет
(condition) ? (code for YES) : (code for NO)
Это обычный обычный тернарный оператор. Если часть перед вопросительным знаком истинна, она оценивает и возвращает часть перед двоеточием, иначе она оценивает и возвращает часть после двоеточия.
a?b:c
похож на
if(a)
b;
else
c;
Это часть C, поэтому она не имеет значения Objective-C. Здесь перевод в оператор if
:
if (inPseudoEditMode)
label.frame = kLabelIndentedRec;
else
label.frame = kLabelRect;
Это просто краткая форма написания оператора if-then-else. Это означает, что следующий код:
if(inPseudoEditMode)
label.frame = kLabelIndentedRect;
else
label.frame = kLabelRect;
Это тернарный оператор, как оператор if/else.
if(a > b) {
what to do;
}
else {
what to do;
}
В тройном операторе это выглядит так: состояние? что делать, если условие истинно: что делать, если оно ложно;
(a > b) ? what to do if true : what to do if false;
int padding = ([[UIScreen mainScreen] bounds].size.height <= 480) ? 15 : 55;
означает
int padding;
if ([[UIScreen mainScreen] bounds].size.height <= 480)
padding = 15;
else
padding = 55;
Я только что узнал что-то новое о тернарном операторе. Короткая форма, которая опускает средний операнд, действительно элегантна и является одной из многих причин, по которым C остается актуальной. FYI, я вначале столкнулся с этим в контексте процедуры, реализованной на С#, которая также поддерживает тройной оператор. Поскольку тернарный оператор находится в C, то разумно, что он был бы на других языках, которые по существу являются его расширениями (например, Objective-C, С#).
Как все говорили, что это способ представления условного оператора
if (condition){
true
}
else {
false
}
с использованием тернарного оператора (condition)? true:false
Чтобы добавить дополнительную информацию, в Quickift у нас есть новый способ представления с помощью ??
.
let imageObject: UIImage = (UIImage(named: "ImageName")) ?? (initialOfUsername.capitalizedString).imageFromString
Что похоже на
int a = 6, c= 5;
if (a > c)
{
a is greater
} else {
c is greater
}
эквивалентно
if (a>c)?a:c
== > Является равным if (a>c)?:c
вместо ?:
мы можем использовать ??
быстро.
Пример троичного оператора. Если значение isFemale boolean variable - YES, print "GENDER is FEMALE" в противном случае "GENDER IS MALE"
? means = execute the codes before the : if the condition is true.
: means = execute the codes after the : if the condition is false.
Objective-C
BOOL isFemale = YES; NSString *valueToPrint = (isFemale == YES) ? @"GENDER IS FEMALE" : @"GENDER IS MALE"; NSLog(valueToPrint); //Result will be "GENDER IS FEMALE" because the value of isFemale was set to YES.
Для Swift
let isFemale = false let valueToPrint:String = (isFemale == true) ? "GENDER IS FEMALE" : "GENDER IS MALE" print(valueToPrint) //Result will be "GENDER IS MALE" because the isFemale value was set to false.