博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift学习笔记(7)--控制流
阅读量:5344 次
发布时间:2019-06-15

本文共 4997 字,大约阅读时间需要 16 分钟。

1.For循环

//1.条件递增for var index = 0; index < 3; ++index {    println("index is \(index)")}//2.for in循环//  2.1有变量名for index in 1...5 {    println("\(index) times 5 is \(index * 5)")}//  2.2没有变量名,如果不需要知道区间内每一项的值,你可以使用下划线(_)替代变量名来忽略对值的访问:let base = 3let power = 10var answer = 1for _ in 1...power {    answer *= base}//  2.3遍历数组let names = ["Anna", "Alex", "Brian", "Jack"]for name in names {    println("Hello, \(name)!")}//  2.4遍历字典let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]for (animalName, legCount) in numberOfLegs {    println("\(animalName)s have \(legCount) legs")}//  2.5遍历字符串的字符for character in "Hello" {    println(character)}

  

2.While循环

//1.while循环let maxValue = 100var x = 0while x < maxValue {    x++}println(x)  //100//2.do while循环var y = 0do {    y++} while y < maxValueprintln(y)  //100

  

3.If语句

var checkValue = 10//1.ifvar x = 1if x < checkValue {    println("x < 10")}//2.if elsevar y = 15if y < checkValue {    println("y < checkValue")} else {    println("y >= checkValue")}//3.elseifvar z = 10if z < checkValue {    println("z < checkValue")} else if z > checkValue {    println("z > checkValue")} else {    println("z = checkValue")}

  

4.Switch语句

与 C 语言和 Objective-C 中的switch语句不同,在 Swift 中,当匹配的 case 分支中的代码执行完毕后,程序会终止switch语句,而不会继续执行下一个 case 分支。这也就是说,不需要在 case 分支中显式地使用break语句。这使得switch语句更安全、更易用,也避免了因忘记写break语句而产生的错误。

//1.普通匹配let someCharacter: Character = "e"switch someCharacter {case "a", "e", "i", "o", "u":    println("\(someCharacter) is a vowel")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 consonant")default:    println("\(someCharacter) is not a vowel or a consonant")}// 输出 "e is a vowel"//2.区间匹配let count = 200var naturalCount: Stringswitch count {case 0:    naturalCount = "0"case 1...10:    naturalCount = "a few"case 10...100:    naturalCount = "several"case 100...999:    naturalCount = "hundreds of"case 1000...999_999:    naturalCount = "thousands of"default:    naturalCount = "millions and millions of"}println("There are \(naturalCount).")// 输出 "There are hundreds of."//3.(Tuple)元组匹配可以使用元组在同一个switch语句中测试多个值。元组中的元素可以是值,也可以是区间。另外,使用下划线(_)来匹配所有可能的值。    // 以2*2的坐标区间为例let somePoint = (1, 1)switch somePoint {case (0, 0):    println("(0, 0)在原点")case (_, 0):    println("(\(somePoint.0), 0)在x轴")case (0, _):    println("(0, \(somePoint.1))在y轴")case (-2...2, -2...2):    println("(\(somePoint.0), \(somePoint.1))在2*2区域内")default:    println("(\(somePoint.0), \(somePoint.1))在2*2区域外")}// 输出 "(1, 1)在2*2区域内"    //值绑定:可以将元组中的值临时绑定到一个变量中let anotherPoint = (2, 0)switch anotherPoint {case (let x, 0):    println("在x轴,且x坐标值为:\(x)")case (0, let y):    println("在y轴,且y坐标值为:\(y)")case let (x, y):    println("坐标点:(\(x), \(y))")}// 输出 "在x轴,且x坐标值为:2"    //case 分支的模式可以使用where语句来判断额外的条件。let yetAnotherPoint = (1, -1)switch yetAnotherPoint {case let (x, y) where x == y:    println("(\(x), \(y)) 在x == y的直线上")case let (x, y) where x == -y:    println("(\(x), \(y)) 在x == -y的直线上")case let (x, y):    println("(\(x), \(y)) 不在对称线上")}// 输出 "(1, -1) 在x == -y的直线上"

  

5.控制转移关键字

  • continue
  • break
  • fallthrough (贯穿)
  • return (在函数中使用,略)
//1.continuefor i in 1...10 {    if i%2 == 0 {        continue //整除2就直接进入下一次循环    }    print("\(i) ")}   // 输出1 3 5 7 9//2.breakfor i in 1...10 {    if i%3 == 0 {        break //整除3就直接跳出for循环    }    print("\(i) ")}   // 输出1 2println("")//3.fallthrough 贯穿/*Swift 中的switch不会从上一个 case 分支落入到下一个 case 分支中。相反,只要第一个匹配到的 case 分支完成了它需要执行的语句,整个switch代码块完成了它的执行。相比之下,C 语言要求你显示的插入break语句到每个switch分支的末尾来阻止自动落入到下一个 case 分支中。Swift 的这种避免默认落入到下一个分支中的特性意味着它的switch 功能要比 C 语言的更加清晰和可预测,可以避免无意识地执行多个 case 分支从而引发的错误。如果你确实需要 C 风格的贯穿(fallthrough)的特性,你可以在每个需要该特性的 case 分支中使用fallthrough关键字。下面的例子使用fallthrough来创建一个数字的描述语句。*/let integerToDescribe = 5var description = "数字 \(integerToDescribe) 是"switch integerToDescribe {case 2, 3, 5, 7, 11, 13, 17, 19:    description += "一个质数, 也是一个"    fallthroughcase 1, 3, 5, 7, 9, 11, 13, 15, 17, 19:    description += "奇数, 也是一个"    fallthroughdefault:    description += "整数"}println(description)// 输出 "数字 5 是一个质数, 也是一个奇数, 也是一个整数."

  

6.带标签控制流

Swift 中,你可以在循环体和switch代码块中嵌套循环体和switch代码块来创造复杂的控制流结构。然而,循环体和switch代码块两者都可以使用break语句来提前结束整个方法体。因此,显示地指明break语句想要终止的是哪个循环体或者switch代码块,会很有用。类似地,如果你有许多嵌套的循环体,显示指明continue语句想要影响哪一个循环体也会非常有用。

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

let maxValue = 100let flagValue = 55let stepValue = 10var i = 5addLoop: while i < maxValue {    i = i + stepValue    switch i {    case flagValue:        println("到达标示的数字,退出wile循环")        break addLoop    case 1...10:        println("数字\(i)介于1到10之间")    case 11...20:        println("数字\(i)介于11到20之间")    case 21...30:        println("数字\(i)介于21到30之间")    case 31...40:        println("数字\(i)介于31到40之间")    case 41...50:        println("数字\(i)介于41到50之间")    case 51...60:        println("数字\(i)介于51到60之间")            default:        println("Default")    }}

  

 

 

转载于:https://www.cnblogs.com/anywherego/p/3789039.html

你可能感兴趣的文章
小强升职计读书笔记
查看>>
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
忘记root密码,怎么办
查看>>
linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
查看>>
《黑客与画家》 读书笔记
查看>>
bzoj4407: 于神之怒加强版
查看>>
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
HAL层三类函数及其作用
查看>>
Odoo 去掉 恼人的 "上午"和"下午"
查看>>
web@h,c小总结
查看>>
java编程思想笔记(一)——面向对象导论
查看>>
Data Structure 基本概念
查看>>
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>