美文网首页
swift 控制流(循环、选择等等)

swift 控制流(循环、选择等等)

作者: 皆为序幕_ | 来源:发表于2018-11-14 18:25 被阅读0次

For-In 循环

  • 常见for-in 循环
let arr = ["A","B","C"]
for value in arr {
    print(value)
}
let dic = ["key":"a","key1":"b"]
for (key,value) in dic {
    print("\(key)---\(value)")
}
for index in 1 ..< 3 {
    print(index)
}
  • 如果不需要序列中的每个值,则可以使用下划线代替变量名来忽略这些值
var a = 2
let b = 3
for _ in 1 ... b {
    a += b
}
print(a)
  • 可跳过不需要的打印的值
//stride(from:to:by:)封闭范围是个开区间
for value in stride(from: 0, to: 10, by: 2) {
    print(value) //0    2   4   6   8
}
//stride(from:through:by:)封闭范围是个闭区间
for value in stride(from: 0, through: 10, by: 2) {
    print(value) //0    2   4   6   8    10
}

While 循环

  • While循环
var a = 3
while a > 0 {
    a -= 1
    print(a)  //2  1  0
}
  • repeat- while循环,类似(do-while)
var a = 0
repeat {
    a += 1
    print(a)  //1  2  3
} while a < 3

条件语句

  • if、if...else 等
let value = 5
if value > 3 {
    print("\(value) is big than 3")
}


if value > 6 {
    print("\(value) is big than 6")
}else{
    print("\(value) is smaller than 6")
}
  • switch
    • 不需要在 case 分支中显式地使用break语句,当匹配的 case 分支中的代码执行完毕后,程序会终止switch语句,而不会继续执行下一个 case 分支
    let value = 2
    switch value {
    case 1:
        print(value)
    case 2:
        print(value)
    case 3:
        print(value)
    default:
        print(value)
    }
    
    • 单个case同时匹配2和3,可以将这个两个值组合成一个复合匹配
    let value = 2
    switch value {
    case 1:
        print(value)
    case 2 , 3:
        print(value)
    default:
        print(value)
    }
    
    • case 分支的模式也可以是一个值的区间
    switch value {
    case 1:
        print(value)
    case 2 ..< 9:
        print(value)
    case 10:
        print(value)
    default:
        print(value)
    }
    
    • 使用元组在同一个switch语句中测试多个值。元组中的元素可以是值,也可以是区间。另外,使用下划线(_)来匹配所有值
    let somePoint = (1, 1)
    switch somePoint {
    case (0, 0):
        print("\(somePoint) 原点")
    case (_, 0):
        print("\(somePoint) 在x轴上")
    case (0, _):
        print("\(somePoint) 在y轴上")
    case (-2...2, -2...2):
        print("\(somePoint) 在区域里")
    default:
        print("\(somePoint) 在区域外")
    }
    
    • case 分支允许将匹配的值声明为临时常量或变量,并且在case分支体内使用
    let anotherPoint = (0, 2)
    switch anotherPoint {
    case (let x, 0):
        print("x 轴的值是 \(x)")
    case (0, let y):
        print("y 轴的值是 \(y)")
    case let (x, y):
        print("点的坐标是 (\(x), \(y))")
    }
    
    • 可以使用where语句来判断额外的条件
    let yetAnotherPoint = (1, -1)
    switch yetAnotherPoint {
    case let (x, y) where x == y:
        print("(\(x), \(y)) 在 x == y线上")
    case let (x, y) where x == -y:
        print("(\(x), \(y)) 在 x == -y 线上")
    case let (x, y):
        print("(\(x), \(y)) 只是任意一点")
    }
    
    • 复合匹配
      当多个条件可以使用同一种方法来处理时,可以将这几种可能放在同一个case后面,并且用逗号隔开
    let stillAnotherPoint = (9, 1)
    switch stillAnotherPoint {
    case (let distance, 0), (0, let distance):
         print("\(distance) 在轴上")
    default:
         print("不是在轴上")
    }  
    

控制转移语句

  • continue:立刻停止本次循环,重新开始下次循环
  • break:立刻结束整个循环的执行
  • fallthrough:不会检查它下一个将会落入执行的 case 中的匹配条件。fallthrough简单地使代码继续连接到下一个 case 中的代码
let flag = 5
var description = "北京"
switch flag {
case 5:
    description += "的"
    fallthrough
case 10:
    description += "冬天"
default:
    description += "全是霾"
}
print(description)  //北京的冬天
  • return:跳出函数
  • throw:

提前退出(guard...else)

  • 能使用if...else的地方都能使用guard...else,但是反过来未必。guard一定要和else一起使用,而且使用的地方也必须是在函数中
guard *判断语句* else {
    *****
    break\return\continue...
}
语句组
  • 当判断语句的条件满足的时候,就会去执行语句组,但是在不满足的情况下,就会去执行else中的语句,并且必须写上break、return、continue、throw等关键字作为结束符
let score = 59
guard score >= 60 else {
    print("考试不及格")   // 不满足就返回
    return
}
print(score)

整个流程都是比较清晰的,而且代码量也比if嵌套的少


检测 API 可用性

  • Swift内置支持检查 API 可用性,这可以确保我们不会在当前部署机器上,不小心地使用了不可用的API
if #available(platform name version, ..., *) {
    APIs 可用,语句将执行
} else {
    APIs 不可用,语句将不执行
}
  • 在它一般的形式中,可用性条件使用了一个平台名字和版本的列表。平台名字可以是iOSmacOSwatchOStvOS。除了指定像 iOS 8 或 macOS 10.10 的大版本号,也可以指定像 iOS 8.3 以及 macOS 10.10.3 的小版本号
if #available(iOS 12, macOS 10.12, *) {
    print("在 iOS 使用 iOS 12 的 API, 在 macOS 使用 macOS 10.12 的 API")
} else {
    print("使用先前版本的 iOS 和 macOS 的 API")
}

if语句的代码块仅仅在 iOS 10 或 macOS 10.12 及更高版本才运行。最后一个参数,*,是必须的,用于指定在所有其它平台中,如果版本号高于你的设备指定的最低版本,if语句的代码块将会运行

相关文章

  • swift 控制流(循环、选择等等)

    For-In 循环 常见for-in 循环 如果不需要序列中的每个值,则可以使用下划线代替变量名来忽略这些值 可跳...

  • Swift教程之控制流

    控制流 Swift包含很多控制流语句:while循环、if、guard、switch和for-in循环。 For-...

  • 控制流(Control Flow)

    swift里面的控制流分为For-In 循环、While 循环、 条件语句、控制转移语句、 提前退出、检测 API...

  • Swift控制流

    Swift控制流 for 循环 Swift中使用for-in的形式来进行for循环,类似于C语言的for条件递增的...

  • Swift5.x-函数(中文文档)

    引言 继续学习Swift文档,从上一章节:控制流,我们学习了Swift控制流相关的内容,如for-in循环、whi...

  • 控制流

    控制流 [TOC] Swift提供了多种流程控制结构,包括可以多次执行任务的while循环,基于特定条件选择执行不...

  • Swift - 控制流

    控制流 Swift 提供了多种流程控制结构,包括可以多次执行任务的 while 循环,基于特定条件选择执行不同代码...

  • 第七章 控制流

    第七章 控制流 Swift 提供了类似于 C 语言的控制流结构,包括for、while循环;if、switch条件...

  • Swift - 控制流

    控制流语句,用于控制程序正在执行的流程。Swift中,控制流语句主要为条件语句和循环语句。 条件语句 if条件语句...

  • swift控制流——循环语句

    for-in循环 在上面的语法格式中,index是一个每次循环遍历开始时被自动赋值的常量,这种情况下,index在...

网友评论

      本文标题:swift 控制流(循环、选择等等)

      本文链接:https://www.haomeiwen.com/subject/erilfqtx.html