【问题标题】:Short IF ELSE syntax in objective C目标 C 中的短 IF ELSE 语法
【发布时间】:2012-04-06 00:24:11
【问题描述】:

在像 PHP 这样的目标 C 中是否有 if-else 语句的简短语法:

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

短版:

return $value?1:0;

【问题讨论】:

  • return value?1:0;return !!value; 相同
  • 不,Objective-C 本身没有这样的东西。但是 Objective-C 是基于 C 构建的,并且可以完全访问 C 语法/语义,并且在 C、C++、Java 和其他几种语言中存在完全相同的语法。 PHP 无疑是从 C 中获得的。
  • 仅供参考,? : 被称为 ternary operator
  • 只要 PHP 是基于 ANSI-C 语言的语法,而 ObjectiveC 是 ANSI-C- 的子集语言,并且三元运算符已经在 ANSI-C 中可用 - 这个问题完全愚蠢,甚至不值得一票。
  • @holex 要求我的朋友!

标签: objective-c ios syntax if-statement


【解决方案1】:

在这两种语言中完全相同,除了您通常不会在 Objective-C 变量名称中找到 $ 符号。

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

您还应该记住,条件运算符?: 与其说是 if-else 语句的简写,不如说是 true vs false 表达式的简写。请参阅PHP manual

【讨论】:

  • ?: 在 C 和儿童版本中可用。它的意思是“这个或那个,如果这是错误的”。 int i = j ?: k;如果j为0,则分配k。
  • @atomkirk:很有趣,所以它确实存在于 PHP 之外(并且工作方式相同)。我删除了我的错误陈述。
  • ?: 的另一个好处是“value”只被评估一次,如果你想做类似的事情:“if value return value else return nil”
【解决方案2】:

是的。

示例(伪):

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

根据您的示例(有效代码):

BOOL result = value ? YES : NO; 

【讨论】:

  • 这让我的代码非常漂亮、整洁和成熟。谢谢!
  • 我这样使用它并且工作得很好:NSString *toRet = [dataToSave writeToFile:filePath atomically:NO]? @“是”:@“否”;
【解决方案3】:

很惊讶没有人提出以下建议:

  • 加长版:

    if(value)
        return 1;
    else
        return 0;
    
  • 小版本:

    return value;
    

如果 value 不是 bool 变量,只需转换它:return (BOOL)value;

【讨论】:

  • 那是因为后者(小版本)是错误的。至少对于旧的 ObjC 运行时和编译器。在那些BOOL 上是typedef 上的signed char。因此,任何大于 255 且较小字节全为零的值(例如 256)将导致 NO,而不是 YES,因为转换为单字节 signed char 将剥离较高的, 非零位。请改用return !!value;,或return value != NO;。更多:nshipster.com/bool
猜你喜欢
  • 2011-05-26
  • 2012-04-25
  • 2014-08-25
  • 2012-11-26
  • 1970-01-01
  • 2012-02-05
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多