【IOS 开发】Objective - C 语法 之 流程控制

举报
韩曙亮 发表于 2022/01/11 00:54:59 2022/01/11
【摘要】   1. if 条件语句   if 表达式 : 表达式是一个 整型 或者 布尔型, 0 或者 FALSE 为 FALSE, 大于 0 为 TRUE;   代码示例 :    /*************************************************...

 

1. if 条件语句

 

if 表达式 : 表达式是一个 整型 或者 布尔型, 0 或者 FALSE 为 FALSE, 大于 0 为 TRUE;

 

代码示例

 


  
  1. /*************************************************************************
  2. > File Name: 11-ifelse.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 二 12/ 2 01:22:57 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char * argv[])
  9. {
  10. @autoreleasepool {
  11. int a = 9;
  12. if(a > 20){
  13. NSLog(@"大于9");
  14. }else if(a > 20){
  15. NSLog(@"大于10");
  16. }else{
  17. NSLog(@"小于等于10");
  18. }
  19. if(a)
  20. {
  21. NSLog(@"非0数字也可以是TRUE");
  22. }
  23. }
  24. }


执行结果

 

 

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 11-ifelse.m 
octopus-2:oc octopus$ ./a.out 
2014-12-02 01:49:12.487 a.out[658:507] 小于等于10
2014-12-02 01:49:12.490 a.out[658:507] 非0数字也可以是TRUE

 

 

 

 

 

 

2. switch 分支语句

 

 

switch 控制表达式 : switch() 中得控制表达式类型限定 char, short, int, long, long long .

 

代码示例

-- 代码

 


  
  1. /*************************************************************************
  2. > File Name: 11-switch.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 二 12/ 2 18:49:28 2014
  6. Switch 分支语句 switch 中只能是 short char int long 和 long long 类型
  7. ************************************************************************/
  8. #import <Foundation/Foundation.h>
  9. int main(int argc, char * argv[])
  10. {
  11. @autoreleasepool {
  12. char type = 'A';
  13. switch(type)
  14. {
  15. case 'A':
  16. NSLog(@"A type");
  17. break;
  18. case 'B':
  19. NSLog(@"B type");
  20. break;
  21. case 'C':
  22. NSLog(@"C type");
  23. break;
  24. default:
  25. NSLog(@"DEFAULT");
  26. }
  27. }
  28. }

 

 

 

 

 

-- 执行结果

 

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 11-switch.m 
octopus-2:oc octopus$ ./a.out 
2014-12-02 18:54:18.696 a.out[850:507] A type

 

 

 

 

 

 

3. 循环结构

 

 

循环要素

-- 初始化 (init_statements) : 初始化循环中用到的数据;

-- 循环条件 (test_expression) : boolean 表达式, 决定是否执行循环体;

-- 循环体 (body_statements) : 重复执行的内容;

-- 迭代语句 (iteration_statements) : 改变循环条件;

 

 

(1) while 循环

 

while 循环格式 : 先判断 test_expression 值, 如果为 TRUE, 执行循环体, 否则执行下面的语句;

 

init_statements;

while(test_expression)

{

body_statement;

iteration_statements;

}

 

 

(2) do while 循环

 

do while 循环格式 : 先执行循环体, 判断循环条件, 如果 test_expression 为真, 就执行下一次循环, 否则终止循环;

 

init_statements;

do

{

body_statements;

iteration_statements;

}while(test_expression)

 

 

(3) for 循环

 

for 循环格式

for(init_statements; test_expression; iteration_statements)

{

body_statements;

}

 

 

(4)  代码示例

 

代码

 


  
  1. /*************************************************************************
  2. > File Name: 11-while.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 二 12/ 2 20:29:17 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char * argv[])
  9. {
  10. @autoreleasepool {
  11. //while 循环
  12. int a = 3;
  13. while(a > 0)
  14. {
  15. NSLog(@"while 循环 : a 的值是 %d", a);
  16. a--;
  17. }
  18. //do while 循环 这里 a 不符合条件, 只执行 do 中得语句
  19. do
  20. {
  21. NSLog(@"do while 循环 : a = %d", a);
  22. }while(a > 100);
  23. //for 循环
  24. for(int i = 0; i < 5; i ++)
  25. {
  26. NSLog(@"for 循环 i = %d", i);
  27. }
  28. }
  29. }

 

 

 

 

 

执行结果

 

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 11-while.m 
octopus-2:oc octopus$ ./a.out 
2014-12-02 20:47:14.454 a.out[1021:507] while 循环 : a 的值是 3
2014-12-02 20:47:14.456 a.out[1021:507] while 循环 : a 的值是 2
2014-12-02 20:47:14.456 a.out[1021:507] while 循环 : a 的值是 1
2014-12-02 20:47:14.457 a.out[1021:507] do while 循环 : a = 0
2014-12-02 20:47:14.457 a.out[1021:507] for 循环 i = 0
2014-12-02 20:47:14.457 a.out[1021:507] for 循环 i = 1
2014-12-02 20:47:14.458 a.out[1021:507] for 循环 i = 2
2014-12-02 20:47:14.458 a.out[1021:507] for 循环 i = 3
2014-12-02 20:47:14.459 a.out[1021:507] for 循环 i = 4

 

 

 

 

 

 

4. 循环控制 

 

循环控制

-- break : 退出当层循环;

-- continue : 跳过该次循环, 执行下一次循环;

-- return : 直接返回函数, 不管有多少层, 直接返回;

 

代码示例

-- Object-C 代码

 


  
  1. /*************************************************************************
  2. > File Name: 11-circleControl.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 三 12/ 3 00:40:44 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char * argv[])
  9. {
  10. @autoreleasepool {
  11. NSLog(@"break 控制 : ");
  12. //break 会 跳出 对应的当前一级的循环, 如果是嵌套循环, 只会跳出那一层循环
  13. for(int i = 0; i < 3; i ++)
  14. {
  15. for(int j = 0; j < 2; j++)
  16. {
  17. if(i == 1 && j == 1)
  18. {
  19. NSLog(@"i = 1, j = 1 中断本层循环, 执行 i = 2 的情况");
  20. break;
  21. }
  22. NSLog(@"i = %d, j = %d", i, j);
  23. }
  24. }
  25. NSLog(@"\n");
  26. NSLog(@"continue 控制 : ");
  27. for(int i = 0; i < 3; i ++)
  28. {
  29. if(i == 1)
  30. {
  31. NSLog(@"i == 1, 终止本次执行, 执行 i = 2 情况");
  32. continue;
  33. }
  34. NSLog(@"i = %d", i);
  35. }
  36. NSLog(@"\n");
  37. NSLog(@"return 控制 : ");
  38. for(int i = 0; i < 3; i ++)
  39. {
  40. for(int j = 0; j < 2; j ++)
  41. {
  42. if(i == 1 && j == 1)
  43. {
  44. NSLog(@"i == 1 && j == 1, 直接退出函数, 不再执行下面的语句");
  45. return 0;
  46. }
  47. NSLog(@"i = %d, j = %d", i, j);
  48. }
  49. }
  50. }
  51. }

 

 

 

 

 

-- 执行结果

 

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 11-circleControl.m 
octopus-2:oc octopus$ ./a.out 
2014-12-03 01:06:35.669 a.out[1360:507] break 控制 : 
2014-12-03 01:06:35.671 a.out[1360:507] i = 0, j = 0
2014-12-03 01:06:35.671 a.out[1360:507] i = 0, j = 1
2014-12-03 01:06:35.672 a.out[1360:507] i = 1, j = 0
2014-12-03 01:06:35.672 a.out[1360:507] i = 1, j = 1 中断本层循环, 执行 i = 2 的情况
2014-12-03 01:06:35.673 a.out[1360:507] i = 2, j = 0
2014-12-03 01:06:35.673 a.out[1360:507] i = 2, j = 1
2014-12-03 01:06:35.674 a.out[1360:507] 
2014-12-03 01:06:35.674 a.out[1360:507] continue 控制 : 
2014-12-03 01:06:35.675 a.out[1360:507] i = 0
2014-12-03 01:06:35.675 a.out[1360:507] i == 1, 终止本次执行, 执行 i = 2 情况
2014-12-03 01:06:35.675 a.out[1360:507] i = 2
2014-12-03 01:06:35.676 a.out[1360:507] 
2014-12-03 01:06:35.676 a.out[1360:507] return 控制 : 
2014-12-03 01:06:35.676 a.out[1360:507] i = 0, j = 0
2014-12-03 01:06:35.677 a.out[1360:507] i = 0, j = 1
2014-12-03 01:06:35.677 a.out[1360:507] i = 1, j = 0
2014-12-03 01:06:35.678 a.out[1360:507] i == 1 && j == 1, 直接退出函数, 不再执行下面的语句

 

 

 

 

 

 

5. goto 语句

 

 

goto 用法

-- 定义标签 : 在程序任意位置打上标签, 例如 "start : ";

-- 跳转标签 : 使用 "goto 标签;" 语句, 跳转到指定位置;

 

goto 常用场景 : 从内层循环跳到指定的外层循环, 或者直接跳出多重嵌套循环, 还要继续执行下面的语句;

 

代码示例

-- Object-C 代码

 


  
  1. /*************************************************************************
  2. > File Name: 11-goto.m
  3. > Author: octopus
  4. > Mail: octopus_truth.163.com
  5. > Created Time: 三 12/ 3 01:09:55 2014
  6. ************************************************************************/
  7. #import <Foundation/Foundation.h>
  8. int main(int argc, char * argv[])
  9. {
  10. @autoreleasepool {
  11. NSLog(@"goto 代替 do while 循环 : ");
  12. int k = 0;
  13. circle :
  14. NSLog(@"k = %d", k++);
  15. if(k < 3)
  16. {
  17. goto circle;
  18. }
  19. NSLog(@"\n");
  20. NSLog(@"goto 跳出本层循环");
  21. for(int i = 0; i < 3; i ++)
  22. {
  23. for(int j = 0; j < 2; j ++)
  24. {
  25. if(i == 1 && j == 1)
  26. {
  27. NSLog(@"此时 i == 1 && j == 1跳出到 外层循环, 执行 i = 2 的情况");
  28. goto out;
  29. }
  30. NSLog(@"i = %d, j = %d", i, j);
  31. }
  32. out :
  33. NSLog(@"内存循环执行完毕");
  34. }
  35. NSLog(@"\n");
  36. NSLog(@"goto 跳出所有循环");
  37. for(int i = 0; i < 3; i ++)
  38. {
  39. for(int j = 0; j < 2; j ++)
  40. {
  41. if(i == 1 && j == 1)
  42. {
  43. NSLog(@"此时 i == 1 & j == 1 跳出所有循环");
  44. NSLog(@"i = %d, j = %d", i, j);
  45. }
  46. }
  47. }
  48. over :
  49. NSLog(@"所有循环执行完毕");
  50. }
  51. }

 

 

 

 

 

-- 执行结果

 

octopus-2:oc octopus$ clang -fobjc-arc -framework Foundation 11-goto.m 
octopus-2:oc octopus$ ./a.out 
2014-12-03 01:26:36.027 a.out[1475:507] goto 代替 do while 循环 : 
2014-12-03 01:26:36.028 a.out[1475:507] k = 0
2014-12-03 01:26:36.029 a.out[1475:507] k = 1
2014-12-03 01:26:36.029 a.out[1475:507] k = 2
2014-12-03 01:26:36.029 a.out[1475:507] 
2014-12-03 01:26:36.030 a.out[1475:507] goto 跳出本层循环
2014-12-03 01:26:36.030 a.out[1475:507] i = 0, j = 0
2014-12-03 01:26:36.031 a.out[1475:507] i = 0, j = 1
2014-12-03 01:26:36.031 a.out[1475:507] 内存循环执行完毕
2014-12-03 01:26:36.031 a.out[1475:507] i = 1, j = 0
2014-12-03 01:26:36.032 a.out[1475:507] 此时 i == 1 && j == 1跳出到 外层循环, 执行 i = 2 的情况
2014-12-03 01:26:36.032 a.out[1475:507] 内存循环执行完毕
2014-12-03 01:26:36.033 a.out[1475:507] i = 2, j = 0
2014-12-03 01:26:36.033 a.out[1475:507] i = 2, j = 1
2014-12-03 01:26:36.033 a.out[1475:507] 内存循环执行完毕
2014-12-03 01:26:36.034 a.out[1475:507] 
2014-12-03 01:26:36.034 a.out[1475:507] goto 跳出所有循环
2014-12-03 01:26:36.035 a.out[1475:507] 此时 i == 1 & j == 1 跳出所有循环
2014-12-03 01:26:36.035 a.out[1475:507] i = 1, j = 1
2014-12-03 01:26:36.035 a.out[1475:507] 所有循环执行完毕

 

 

 

 

 

 

 

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/41664413

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。