Краткий синтаксис IF ELSE в objective C

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

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

сокращенный вариант:

return $value?1:0;

4 ответов


да.

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

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

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

BOOL result = value ? YES : NO; 

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

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

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


удивлен, что никто не предложил :

  • версия :

    if(value)
        return 1;
    else
        return 0;
    
  • маленькая версия :

    return value;
    

и если value не bool переменная, просто бросьте ее:return (BOOL)value;


троичный оператор-это божий дар объекту-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; }