Подтвердить что ты не робот

Короткое синтаксис IF ELSE в объективе C

Есть ли короткий синтаксис для инструкции if-else в объекте C, например PHP:

if($value)
return 1;
else
return 0;

более короткая версия:

return $value?1:0;
4b9b3361

Ответ 1

Да.

Пример (псевдо):

value = (expression) ? (if true) : (if false);

На основе вашего примера (действительный код):

BOOL result = value ? YES : NO; 

Ответ 2

Это точно то же самое на обоих языках, за исключением того, что вы обычно не находите знаки $ в именах переменных Objective-C.

if(value)
return 1;
else
return 0;
return value?1:0;

Вы также должны иметь в виду, что условный оператор ?: не является сокращением для оператора if-else так же, как сокращенное выражение для истинного vs ложного выражения. См. руководство по PHP.

Ответ 3

Удивленный, что никто не предложил следующее:

  • Длинная версия:

    if(value)
        return 1;
    else
        return 0;
    
  • Малая версия:

    return value;
    

И если value не является переменной bool, просто введите его: return (BOOL)value;

Ответ 4

тернарный оператор - это дар Бога Objective-C (/мир). Некоторые примеры.

/* if super.init worked, set a property and return self, else return nil. */
- init { return self = super.init ? _intProperty = 99, self : nil; }

/* simple static initializers. no dispatch_once drama.  if nil, set it! */
static NSArray *array = nil; array = array ?: [someOtherArray copy];

/* act on your conditions without messy switches, needless line breaks and punctuation, etc. 
   if you need to do more than one thing, wrap it in an anonymous block! */
anInt == SomeENUM ? [do something]     :
anInt == AlsoENUM ? [do somethingElse] : 
anInt == BlahENUM ? ({ int x = 999;
                       [do anotherThingEntirely:x]; }) 
                  : nil; // no match, keep going!

/* Don't create separate function calls, tailor your call to your condition */
BOOL val = YES; NSLog(@"I %@ repeating myself.", val ? @"HATE" : @"LOVE");

/* property getters, etc... SOO easy with ternary initializers! just return! */  
- property { return _property = _property ?: ^{ // if set, return backing ivar..
  /* otherwise, set it and return it from a block. */
  /* ...your crazy init sequence goes here... */ return _property }(); 
}

/* Use commas to do stuff!  Only the last value is returned! */
- (BOOL) isIt { return _isIt ?: NSLog(@"Only logs if _itIs true", nil), _isIt; }