寒城攻略:Listo 教你 25 天学会 Swift 语言 - 07 Control Flow

import Foundation


//***********************************************************************************************

//1.Control Flow(控制流)

//_______________________________________________________________________________________________

//介绍

//除了 C 里面的 for 条件递增循环, Swift 还增加了 for-in 循环,用来更加简单的遍历数组,字典,范围,字符串和其他序列类型

//Swift 中的 switch 语句也更多的用在 Cswitch 语句的不需要写 breakswitch 语句并且包含范围匹配,元组和投到一个特定的类型


//***********************************************************************************************

//2.For Loopfor 循环)

//_______________________________________________________________________________________________

//For-In

for index in 1...5 {    //最简单的 for in 语句来实现循环

    println(index)

}


//_______________________________________________________________________________________________

//当不需要使用循环中的值的时候,可以使用 _ 来替代 index

let base = 3

let power = 10

var answer = 1

for _ in 1...power{         //使用 _ 来替代 index 元素实现循环

    answer *= base

}

println("\(base) to the power of \(power) is \(answer)")


//_______________________________________________________________________________________________

//使用 for in 获取数组中的元素

let names = ["Listo", "Pin", "Melody", "Colder"]

for name in names{

    println("Hello, \(name)!")

}


//_______________________________________________________________________________________________

//使用 for in 获取字典中的元素

let numberOfLeg = ["Spider": 8, "Ant": 6, "Cat": 4]

for (animalName, legCount) in numberOfLeg{

    println("\(animalName)s have \(legCount) legs")

}


//_______________________________________________________________________________________________

//使用 for in 获取字符串中的每个字符

for character in "Hello"{

    println(character)

}


//_______________________________________________________________________________________________

//传统的 for 循环

for var index = 0; index < 3; ++index{

    println("index is \(index)")

}


//***********************************************************************************************

//3.While Loopwhile 循环)

//_______________________________________________________________________________________________

//while 的使用

var  number = 2             //while 循环举例

while number >= 1{

    println("nice")

    number--

}


//_______________________________________________________________________________________________

//do while 的用法

var number1 = 2

do{

    println("nice")

    number1--

}while number1 >= 1


//***********************************************************************************************

//4.Conditional Statements(条件语句)

//_______________________________________________________________________________________________

//if 语句实现条件判断

var temperatureInFahrenheit = 30

if temperatureInFahrenheit <= 32{

    println("It's very cold, consider wearing a scarf")

}


//_______________________________________________________________________________________________

//if else 语句实现条件控制

temperatureInFahrenheit = 40

if temperatureInFahrenheit <= 32{

    println("It's very cold. consider wearing a scarf")

}

else{

    println("It's not that cold.wear a t-shirt is ok")

}


//_______________________________________________________________________________________________

//if else if  else 语句实现条件控制

temperatureInFahrenheit = 90

if temperatureInFahrenheit <= 32{

    println("It's very cold. consider wearing a scarf")

}

else if temperatureInFahrenheit >= 86{

    println("It's really warm.Don't forget to wear a sunscreen")

}

else{

    println("It's not that cold.wear a t-shirt")

}


//_______________________________________________________________________________________________

//Swtch 特性:与 C 语言和 Objectve-C 中的 switch 语句不同,在 swift 中,当匹配 case 块中的代码执行完毕后,程序会终止 switch语句,而不会继续进行 case 块。也就是不需要显式的添加 break 语句,但是每个 case 必须包含至少一条语句,否则无效


//_______________________________________________________________________________________________

//简单的 switch 语句应用举例

let someCharacter: Character = "e"

switch someCharacter{

    case "a", "e", "i", "o", "u":       // switch 语句中的 case 语句条件并列的时候,用逗号隔开即可

        println("\(someCharacter) is a consonant")

    case "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "y", "z":

        println("\(someCharacter) is a consontant")

    default:

        println("\(someCharacter) is not a vowel or a consonant")

}


//_______________________________________________________________________________________________

// switch 语句中应用范围匹配

let count = 3_000_000_000_000

let countedThings = "stars in the Milky Way"

var naturalCount: String

switch count{                   //switch 语句中加入范围判断

case 0:

    naturalCount = "no"

case 1...3:

    naturalCount = "a few"

case 4...9:

    naturalCount = "several"

case 10...99:

    naturalCount = "tens of"

case 100...999:

    naturalCount = "hundreds of"

case 1000...999_999:

    naturalCount = "thousands of"

default:

    naturalCount = "millons and millons of"

}

println("There are \(naturalCount) \(countedThings)")


//_______________________________________________________________________________________________

// switch 语句中使用元组

let somePoint = (1, 1)

switch somePoint{

case (0, 0):

    println("(0, 0) is at the origin")

case (_, 0):

    println("(\(somePoint.0), 0) is on the x-axis")

case (0, _):

    println("(0, \(somePoint.1)) is on the  y_axis")

case (-2...2, -2...2):

    println("(\(somePoint.0),\(somePoint.1)) is inside the box")

default:

    println("(\(somePoint.0),\(somePoint.1)) is outside the box")

}


//_______________________________________________________________________________________________

//值绑定

let anotherPoint = (2, 0)           //case 块的模式允许将匹配的值绑定到一个临时的变量或者常量上,这些常量或者变量在该 case 块里就可以被引用了,这就是值绑定

switch anotherPoint{

case (let x, 0):

    println("on the x-axis with an x value of \(x)")

case (0, let y):

    println("on the y-axis with a  y value of \(y)")

case let (x, y):

    println("somewhere else at (\(x), \(y))")

}


//_______________________________________________________________________________________________

//where 语句

let yetAnotherPoint = (1, -1)       //使用 where 添加额外的判断条件

switch yetAnotherPoint {

case let (x, y) where x == y:

    println("(\(x), \(y)) is on the line x == y")

case let (x, y) where x == -y:

    println("(\(x), \(y)) is on the line x == -y")

case let (x, y):

    println("(\(x), \(y)) is just some arbitrary point")

}


//***********************************************************************************************

//5.Control Transfer Statements(控制转移语句)

//_______________________________________________________________________________________________

//使用 continue 语句跳过本次迭代

let puzzleInput = "great minds think alike"

var puzzleOutput = ""

for character in puzzleInput{

    switch character{

    case "a", "e", "i", "o", "u", " ":

        continue                        //只要匹配到元音字母或者空格字符的时候,就调用 continue 语句使本次迭代结束,从开始下次的循环迭代

    default:

        puzzleOutput += character

    }

}

println(puzzleOutput)


//_______________________________________________________________________________________________

//使用 break 语句跳出框架

let puzzleInput1 = "great minds think alike"

var puzzleOutput1 = ""

for character1 in puzzleInput1{

    switch character1{

    case "a", "e", "i", "o", "u", " ":

        break                           //当在 switch 代码快中使用 break 语句时,只要匹配到元音字母或者空格字符的时候,就调用 break 语句使跳出 switch 语句,继续进行循环进行循环;当在 for 循环中使用 break 语句时,直接跳出循环不在进行循环

    default:

        puzzleOutput1 += character1

    }

}

println(puzzleOutput1)


//_______________________________________________________________________________________________

//综合使用控制转移语句

let numberSymbol: Character = ""

var possibleIntegerValue: Int?

switch numberSymbol{

case "1", "?", "", "?":

    possibleIntegerValue = 1

case "2", "?", "", "?":

    possibleIntegerValue = 2

case "3", "?", "", "?":

    possibleIntegerValue = 3

case "4", "?", "", "?":

    possibleIntegerValue = 4

default:

    break                               //使用 break 来跳出 switch

}

if let integerValue = possibleIntegerValue{

    println("The integer Value of \(numberSymbol) is \(integerValue)")

}

else{

    println("An integer value could not be found for \(numberSymbol)")

}


//***********************************************************************************************

//6.Fallthrough

//_______________________________________________________________________________________________

//使用 fallthrough 并列两句 case

let integerToDescribe = 5

var description = "The number \(integerToDescribe) is "

switch integerToDescribe{

case 2, 3, 5, 7, 11, 13, 17, 19:

    description += "a prime number, and also"

    fallthrough

default:

    description += " an integer"

}

println(description)                //这个例子定义 String 类型的变量 description 并且给它设置了一个初始值。函数使用 switch 逻辑来判断 integerToDescribe 变量的值。当 integerToDescribe 的值属于列表中的质数之一的时候,该函数添加一段文字在 description 后,来表明这个数字是一个质数。然后它使用 fallthrough 关键字来 "落入" default 分支中,default 分支添加一段额外的文字在 description 后面,然后代码结束


//***********************************************************************************************

//7.Labeled Statements(标签语句)

//_______________________________________________________________________________________________

// Swift 中,我们可以在循环体和 switch 代码块中嵌套循环体和 swith 代码块来创造复杂的控制流结构。然而循环体和 switch 代码块两者都可以使用 break 语句来提前结束整个方法体。因此显式的指名 break 语句想要终止的是那个循环体或者 switch 代码快,这样会很有用。显式的声明 continue 语句想要影响那一个循环体也会很有用。

//为了实现这个目的,你可以使用标签来标记一个循环体或者 switch 代码块,当使用 break 或者 continue 时,带上这个标签,可以控制该标签代表的对象的中断或者执行。

//产生一个带标签的语句是通过在该语句的关键字的同一行前面放置一个标签,并且该标签后面需要带着一个冒号。以 while 循环体举例

/*

label name: while condition{

statements

}

*/


//_______________________________________________________________________________________________

//标签语句实例代码

var score = [97, 87, 34, 100, 88, 49, -4, 80]

First: for s in score{

    switch s/10{

    case 10:

        continue

    case 9:

        println("\(s) 分为优秀")

    case 8:

        println("\(s) 分为良好")

    case 7:

        println("\(s) 分为中等")

    case 0:             //题目要求碰到异常的分数终止循环而不是跳过,当不添加标签使用 break 时,我们终止的是 switch 语句,而不是 for 循环,所以我们需要标签语句来标签 for 循环然后 break for循环 的标签

        break First

    default:

        println("\(s) 分为不及格")

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值