Swift - 条件语句、循环语句

一、条件语句

条件语句通过设定的一个或多个条件来执行程序,在条件为真时执行指定的语句,在条件为 false 时执行另外指定的语句。
可以通过下图来简单了解条件语句的执行过程:

Swift提供了以下几种类型的条件语句:

1.if语句

if 语句 由一个布尔表达式和一个或多个执行语句组成。

Swift语言中if语句的语法:

if boolean_expression {
   /* 如果布尔表达式为真将执行的语句 */
}

如果布尔表达式为 true,则 if 语句内的代码块将被执行。如果布尔表达式为 false,则 if 语句结束后的第一组代码(闭括号后)将被执行。
实例:

var varA:Int = 10;

/* 检测条件 */
if varA < 20 {
    /* 如果条件语句为 true 执行以下程序 */
    print("varA 小于 20");
}
print("varA 变量的值为 \(varA)");

当上面的代码被编译和执行时,它会产生下列结果:

varA 小于 20
varA 变量的值为 10
2.if...else语句

if 语句 后可以有可选的 else 语句, else 语句在布尔表达式为 false 时执行。

Swift语言中if..else语句的语法:

if boolean_expression 
{
    //如果为真,将执行
} else {
    //如果为假,将执行
}

如果布尔表达式true,则执行if块内的代码。如果布尔表达式为false,则执行else块内的代码。


实例:
var varA : Int = 100
if varA < 20 {
    print("varA 小于 20")
} else {
    print("varA 小于 20")
}
print("varA 变量的值为\(varA)")

当上面的代码被编译执行时,它会产生下列结果:

varA 大于 20
varA 变量的值为 100

? : 运算符
我们已经在前面的章节中讲解了 条件运算符 ? :,可以用来替代 if...else 语句。它的一般形式如下:

Exp1 ? Exp2 : Exp3;

其中,Exp1、Exp2 和 Exp3 是表达式。请注意,冒号的使用和位置。
? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值。

3.if...else if...else 语句

if 后可以有可选的 else if...else 语句, else if...else 语句常用于多个条件判断。

使用 if , else if , else 语句时需要注意以下几点:

1.if 语句后可以有 0 个或 1 个 else,但是如果 有 else if 语句,else 语句需要在 else if 语句之后。
2.if 语句后可以有 0 个或多个 else if 语句,else if 语句必须在 else 语句出现之前。
3.一旦 else 语句执行成功,其他的 else if 或 else 语句都不会执行。

语法:

if boolean_expression_1 {
   /* 如果 boolean_expression_1 表达式为 true 则执行该语句 */
} else if boolean_expression_2 {
   /* 如果 boolean_expression_2 表达式为 true 则执行该语句 */
} else if boolean_expression_3 {
   /* 如果 boolean_expression_3 表达式为 true 则执行该语句 */
} else {
   /* 如果以上所有条件表达式都不为 true 则执行该语句 */
}

实例:

var varA:Int = 100;
/* 检测布尔条件 */
if varA == 20 {
    /* 如果条件为 true 执行以下语句 */
    print("varA 的值为 20");
} else if varA == 50 {
    /* 如果条件为 true 执行以下语句 */
    print("varA 的值为 50");
} else {
    /* 如果以上条件都为 false 执行以下语句 */
    print("没有匹配条件");
}
print("varA 变量的值为 \(varA)");

当上面的代码执行时,它会产生下列结果:

没有匹配条件
varA 变量的值为 100
4.内嵌 if 语句

你可以在 if 或 else if 中内嵌 if 或 else if 语句。

语法:
if boolean_expression_1 {
   /* 当 boolean_expression_1 表达式 true 时执行 */
   if boolean_expression_2 {
    /* 当 boolean_expression_1 表达式 true 时执行 */
   }
}
实例:
var varA:Int = 100;
var varB:Int = 200;

if varA == 100 {
   print("第一个条件为 true");
   if varB == 200 {
      print("第二个条件也是 true");
   } 
}    
print("varA 变量的值为 \(varA)");
print("varB 变量的值为 \(varB)");

当上面的代码执行时,它会产生下列结果:

第一个条件为 true
第二个条件也是 true
varA 变量的值为 100
varB 变量的值为 200
5.switch 语句

switch 语句允许测试一个变量等于多个值时的情况。Swift 语言中�只要匹配到 case 语句,则整个 switch 语句执行完成。

语法:
switch expression {
   case expression1:
      statement(s)
      fallthrough 
   case expression2, expression3:
      statement(s)
      fallthrough 
   default:
      statement(s);
}

一般在 switch 语句中不使用 fallthrough 语句。
这里我们需要注意 case 语句中如果没有使用 fallthrough 语句,则在执行当前的 case 语句后,switch 会终止,控制流将跳转到 switch 语句后的下一行。
如果使用了fallthrough 语句,则会继续执行之后的 case 或 default 语句,不论条件是否满足都会执行。

注意:在大多数语言中,switch 语句块中,case 要紧跟 break,否则 case 之后的语句会顺序运行,而在 Swift 语言中,默认是不会执行下去的,switch 也会终止。如果你想在 Swift 中让 case 之后的语句会按顺序继续运行,则需要使用 fallthrough 语句。

实例1:

以下实例没有使用fallthrough

var index = 10

switch index {
   case 100  :
     print( "index 的值为 100")
   case 10,15  :
      print( "index 的值为 10 或 15")
   case 5  :
      print( "index 的值为 5")
   default :
      print( "默认 case")
}

当上面的代码被编译执行时,结果为:index 的值为 10 或 15。

实例2

下列实例中使用fallthrough

var index = 10
switch index {
   case 100  :
      print( "index 的值为 100")
      fallthrough
   case 10,15  :
      print( "index 的值为 10 或 15")
      fallthrough
   case 5  :
      print( "index 的值为 5")
   default :
      print( "默认 case")
}

当上面的代码被编译执行时,结果为:index 的值为 10 或 15,index 的值为 5

二、循环语句

有时我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。
编程语言提供了更为复杂执行路径的多种控制结构。
循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的�流程图:


1.循环类型

Swift语言提供了一下几种循环类型。

1.for-in

遍历一个集合里面的所有元素,例如由数字表示的区间、数组中的元素、字符串中的字符。

Swift for-in 循环的语法格式如下:

for index in var {
   循环体
}
实例1
for index in 1...5 {
    print("\(index)")
}
//输出结果为:1,2,3,4,5

例子中用来进行遍历的元素是使用闭区间操作符(...)表示从1到5的数字区间

实例2
var someInts:[Int] = [10, 20, 30]
for index in someInts {
   print( "index 的值为 \(index)")
}

以上程序执行输出结果为:

index 的值为 10
index 的值为 20
index 的值为 30

2.for

该循环方式在 Swift 3 中已经弃用。
用来重复执行一系列语句直到达成特定条件达成,一般通过在每次循环完成后增加计数器的值来实现。

语法:

for init; condition; increment {
     //此处写循环体
}
参数分析:

1.init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
2.接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
3.在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
4.条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。

实例:

var someInts:[Int] = [10, 20, 30]
for var index = 0; index < 3; ++index {
   print( "索引 [\(index)] 对应的值为 \(someInts[index])")
}

以上程序执行输出结果为:

索引 [0] 对应的值为 10
索引 [1] 对应的值为 20
索引 [2] 对应的值为 30

3.while

运行一系列语句,如果条件为true,会重复运行,直到条件变为false。

语法:

while condition {
  statement(s)
}

语法中的 statement(s) 可以是一个语句或者一个语句块。 condition 可以是一个表达式。如果条件为true,会重复运行一系列语句,直到条件变为false。
数字 0, 字符串 '0' 和 "", 空的 list(), 及未定义的变量都为 false ,其他的则都为 true。true 取反使用 ! 号或 not,取反后返回 false。

实例:
var index = 10
while index < 20 
{
   print( "index 的值为 \(index)")
   index = index + 1
}

以上程序执行输出结果为:

index 的值为 10
index 的值为 11
index 的值为 12
index 的值为 13
index 的值为 14
index 的值为 15
index 的值为 16
index 的值为 17
index 的值为 18
index 的值为 19

4.repeat...while

似 while 语句区别在于判断循环条件之前,先执行一次循环的代码块。

语法:

repeat {
   statement(s);
} while (condition);

注意,条件表达式出现在循环的尾部,所以循环中的 statement(s) 会在条件被测试之前至少执行一次。
如果条件为 true,控制流会跳转回上面的 repeat,然后重新执行循环中的 statement(s)。这个过程会不断重复,直到给定条件变为 false 为止。
数字 0, 字符串 '0' 和 "", 空的 list(), 及未定义的变量都为 false ,其他的则都为 true。true 取反使用 ! 号或 not,取反后返回 false。

实例:

var index = 15
repeat {
    print( "index 的值为 \(index)")
    index = index + 1
} while index < 20

以上程序执行输出结果为:

index 的值为 15
index 的值为 16
index 的值为 17
index 的值为 18
index 的值为 19

2.循环控制语句

循环控制语句改变你代码的执行顺序,通过它你可以实现代码的跳转。

1.continue

Swift continue语句告诉一个循环体立刻停止本次循环迭代,重新开始下次循环迭代。
对于 for 循环,continue 语句执行后自增语句仍然会执行。对于 while 和 do...while 循环,continue 语句重新执行条件判断语句。

实例:

var index = 10
repeat {
   index = index + 1
   if ( index == 15 ) { // index 等于 15 时跳过
      continue
   }
   print( "index 的值为 \(index)")
} while index < 20 

以上程序执行输出结果为:

index 的值为 11
index 的值为 12
index 的值为 13
index 的值为 14
index 的值为 16
index 的值为 17
index 的值为 18
index 的值为 19
index 的值为 20

2.break

Swift break语句会立刻结束整个控制流的执行。
如果您使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。

实例:

var index = 10
repeat{
    index = index + 1
if ( index == 15 ) {  // index 等于 15 时终止循环
    break
}
print( "index 的值为 \(index)")
} while index < 20

以上程序执行输出结果为:

index 的值为 11
index 的值为 12
index 的值为 13
index 的值为 14

3.fallthrough

Swift fallthrough 语句让 case 之后的语句会按顺序继续运行,且不论条件是否满足都会执行。
Swift 中的 switch 不会从上一个 case 分支落入到下一个 case 分支中。只要第一个匹配到的 case 分支完成了它需要执行的语句,整个switch代码块完成了它的执行。

注意:在大多数语言中,switch 语句块中,case 要紧跟 break,否则 case 之后的语句会顺序运行,而在 Swift 语言中,默认是不会执行下去的,switch 也会终止。如果你想在 Swift 中让 case 之后的语句会按顺序继续运行,则需要使用 fallthrough 语句。

实例1:

var index = 10
switch index {
   case 100  :
      print( "index 的值为 100")
   case 10,15  :
      print( "index 的值为 10 或 15")
   case 5  :
      print( "index 的值为 5")
   default :
      print( "默认 case")
}

当上面的代码被编译执行时,结果:

index 的值为 10 或 15

实例2:

var index = 10
switch index {
   case 100  :
      print( "index 的值为 100")
      fallthrough
   case 10,15  :
      print( "index 的值为 10 或 15")
      fallthrough
   case 5  :
      print( "index 的值为 5")
   default :
      print( "默认 case")
}

当上面的代码被编译执行时,结果:

index 的值为 10 或 15
index 的值为 5

下一篇:“Swift - 字符串、字符” http://www.jianshu.com/p/ce8a1082311f

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容