总之如果目标C
ELSE语法是否有任何短的语法,如PHP在Objective C中的if-else语句:总之如果目标C
if($value)
return 1;
else
return 0;
较短的版本:
return $value?1:0;
是的。
例(伪):
value = (expression) ? (if true) : (if false);
根据你的榜样(有效编码):
BOOL result = value ? YES : NO;
这使我的代码变得如此美观,整洁和复杂。谢谢! – 2015-06-22 02:41:42
我这样使用它,并完美地工作:NSString * toRet = [dataToSave writeToFile:filePath atomically:NO]? @“是”:@“否”; – Septronic 2016-02-11 18:37:22
@Alladinian:非常感谢 – 2016-07-28 11:59:39
这是一模一样在两种语言,除了通常在Objective-C变量名称中找不到$
符号。
if(value)
return 1;
else
return 0;
return value?1:0;
你也应该记住,条件运算?:
不是一个if-else语句这么多,作为一个真正的缩写VS假表达的简写。请参阅PHP manual。
三元运算符是上帝的礼物的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; }
这段代码太糟糕了,我不得不-1。三元运算符很有用,但嵌套的三元运算符只是一团糟。第一行是最糟糕的。 – Sulthan 2013-11-05 16:43:15
我永远不会得到ObjC开发者对'if'的喜爱 - 也不会对他们的'{'成瘾。我同意,这很难阅读......如果你是英语教授。但它不是英语! – 2013-11-06 06:12:00
@alexgray块通常不是免费的,所以如果你问为什么人们不按照惯例将多个语句折叠成单个语句,那就是原因。使用逗号试图将多个表达式塞进一个单独的语句在整个C派生的世界中被创造出来,以创建冗余的复杂性。你的第一个init甚至会与Objective-C惯例不正确地起作用。告诉我如果'[super init]'返回一个不同的类实例会发生什么情况,因为它明确可能会和可能会用于类集群? – Tommy 2014-01-10 04:00:57
惊讶,没有人建议如下:
-
龙版本:
if(value) return 1; else return 0;
-
小版本:
return value;
如果value
不是bool
变量,只投它:return (BOOL)value;
这是因为后者(小版本)是错的。至少对于旧的ObjC运行时和编译器。在这些'BOOL'上是'signed char'上的'typedef'。因为任何值大于255的值与较小的字节全部为零(例如'256')将导致“NO”而不是“YES”,因为转换为单字节的'signed char'会剥离更高,非零位。做'返回!!价值;'代替,或'返回值!=否;'。更多:http://nshipster.com/bool/ – Regexident 2014-09-01 08:38:00
'返回值1:0;'是一样'回报!值;' – 2014-01-10 04:03:41
没有,有没有这样的事吗? Objective-C本身。但是Objective-C是建立在C上的,并且可以完全访问C语法/语义,C,C++,Java和其他几种语言中都有完全相同的语法。 PHP毫无疑问得到了来自C. – 2014-01-10 04:27:42
FYI的构建,:' - 东西被称为[三运营商](http://en.wikipedia.org/wiki/Ternary_operation)。 – Regexident 2014-09-01 08:29:31