前言:对于任何语言来说有能力判断是一项基本的特性,例如在循环语句中就需要判断什么时候结束条件语句。Objective-C兼容了C语言的特性,所以C语言中的几种选择结构仍然适用于OC语言:if语句、switch语句、conditional运算符
1.if 语句
if语句是OC语言提供的具有一般判断能力的语言结构,通过判定所给条件的真假来选择需要执行的操作。
if (表达式) 语句
intx=3,y=5;
if(x
NSLog(@"宏创学院欢迎您!");
}
if (表达式) 语句1 else 语句2
intx=3,y=5;
if(x>y){
NSLog(@"宏创学院欢迎您!");
}else{
NSLog(@"学iOS就来宏创学院吧!");
}
if (表达式1) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 … else 语句n
intx=3,y=5;
if(x
NSLog(@"宏创学院欢迎您!");
}elseif(x>y){
NSLog(@"学iOS就来宏创学院吧!");
}else{
NSLog(@"www.hcios.com");
}
if语句也是可以多层嵌套的,在多层嵌套的if语句中,每个判断条件下的语句都应该使用大括号括起来,避免发生歧义。
2.switch 语句
OC语言还提供了另一种用于多分支选择的switch语句, 其一般形式为:
switch(表达式){
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
…
case 常量表达式n: 语句n;
default: 语句n+1;
}
其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。所以为了让程序只执行某个case后面的语句时,我们需要在该case的末尾添加break语句。
// 从键盘输入一个数字,数字1~7代表周一~周日,其余的数字打印Error
intdate;
scanf("%d",&date);
switch(date){
case1:
NSLog(@"Monday");
break;
case2:
NSLog(@"Tuesday");
break;
case3:
NSLog(@"Wednesday");
break;
case4:
NSLog(@"Thursday");
break;
case5:
NSLog(@"Friday");
break;
case6:
NSLog(@"Saturday");
break;
case7:
NSLog(@"Sunday");
break;
default:
NSLog(@"Error!");
break;
}
有时候会出现很多个case下需要执行的代码都相同,那么可以使用下面的形式:
// 从键盘输入一个数字,数字1~7代表周一~周日,其余的数字打印Error
intdate;
scanf("%d",&date);
switch(date){
case1:
case2:
case3:
case4:
case5:
NSLog(@"weekday");
break;
case6:
case7:
NSLog(@"weekend");
break;
default:
NSLog(@"Error!");
break;
}
上面的代码中case 1~5执行的代码都是一样的,都会打印weekday,case 6~7执行的代码一样,会打印weekend,这样写会比较简洁。
如果一个case下的代码中出现定义新变量的操作时,那么case语句冒号后的内容需要加上大括号,否则编译器会报错,其他情况下多行语句可以不适用大括号括起,程序会按顺序执行每一行代码。例如:
case1:{
// case中定义新的变量时需要加上大括号
intnewNumber=10;
NSLog(@"newNumber = %d",newNumber);
break;
}
3.conditional 运算符为三目运算符。
条件运算符是OC语言中较为特殊的一种运算符,因为它是三元运算符,也就是说它需要接受三个运算数。条件运算符的一般格式为:
condition ? expression1 : expression2
在这个语法当中,condition表示一个表达式,通常为关系表达式,OC系统会首先对它求值。如果对condition的求值结果为真(非零)时,程序将返回expression1的结果,如果 对condition的求值结果为假(值为零)时,程序将返回expression2的结果。例如:
max = a > b ? a : b;
上面一行代码的意思是比较 a 与 b 的大小,将 a 与 b 中较大的一个赋给 max。
条件运算符优先级高于赋值、逗号运算符,低于其他运算符,例如:
m
等价于 ==> (m
条件运算符具有右结合性:
当一个表达式中出现多个条件运算符时,应该将位于最右边的问号与离它最近的冒号配对,并按这一原则正确区分各条件运算符的运算对象。
例如:
e1 ? e2 : e3 ? e4 : e5
与 e1 ? e2 : ( e3 ? e4 : e5) 等价。
使用条件表达式可以提高程序的运行效率,但是会降低程序的可读性,尤其是多重条件表达式嵌套使用时,会使程序阅读起来很吃力。
网友评论