Objective C 中的短 IF ELSE 语法

34

在Objective-C中是否有像PHP那样的if-else语句的简短语法:

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

简化版本:

return $value?1:0;

return value?1:0;return !!value; 是相同的。 - Bryan Chen
2
顺便提一下,? : 这个东西被称为三元运算符 - Regexident
只要_PHP_基于_ANSI-C_语言的语法,_ObjectiveC_是_ANSI-C_语言的一个子集,并且三元运算符已经在_ANSI-C_中可用 - 这个问题完全愚蠢,甚至不值得一票赞同。 - holex
@holex,我的朋友,你需要什么? - Firdous
@Firdous,这种“需求”是基于这样一个事实,大多数开发人员对语言/操作系统一无所知,也不想更多地了解它们——在我看来,这真的很好,因为只要这样的问题能够被严格的开发者社区提出并获得19次赞同,那么公司就不会质疑专业人士的费率;他们只是要求这些人,并且这些问题只会把我们的小时费率推到天上;这太棒了,不是吗? :) - holex
显示剩余3条评论
3个回答

114

可以。

条件(三元)运算符

示例(伪代码):

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

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

int result = value ? 1 : 0; 

这让我的代码变得非常漂亮、整洁和复杂。谢谢! - Sergey Lost
我这样使用它,完美地工作了:NSString *toRet = [dataToSave writeToFile:filePath atomically:NO]? @"Yes" : @"No"; - Septronic

13

两种语言完全相同,唯一的区别是通常你在Objective-C变量名中不会发现$符号。

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

你还应该记住条件运算符?:与其说是if-else语句的简写,不如说是真假表达式的简写。请参阅PHP手册


1
?: 在 C 和 C++ 中可用,意思是“如果这个为假,那么就是那个”。int i = j ?: k; 如果 j 是 0,则赋值给 k。 - atomkirk
@atomkirk:有趣,所以它存在于PHP之外(并且工作方式相同)。我撤回了我的错误陈述。 - BoltClock
?: 的另一个好处是,如果您想要执行类似于“如果值返回值,否则返回 nil”的操作,那么“value”只会被评估一次。 - siburb

1

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

  • 长版本:

    如果(value)
        返回1;
    否则
        返回0;
    
  • 简短版本:

    返回value;
    

如果value不是布尔变量,只需要将其转换:return (BOOL)value;


1
那是因为后者(小版本)是错误的。至少对于旧的 ObjC 运行时和编译器来说是这样的。在这些情况下,BOOLsigned char 上的 typedef。因此,任何值大于 255 的值,其中较小的字节都是零(例如 256),将导致结果为 NO,而不是 YES,因为将其转换为单字节的 signed char 将剥离高位的非零位。改用 return !!value;return value != NO;。更多信息:http://nshipster.com/bool/ - Regexident

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接