Краткий синтаксис 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; }