• Swift基础语法 - 流程控制


    if - else

    • if 后面的条件可以省略小括号
    • 条件后面的大括号不可以省略
    let width = 10
    
    if width >= 30 {
        print("宽大于等于30")
    }else if width >= 20 {
        print("宽大于等于20")
    }else if width >= 10{
        print("宽大于等于10")
    }else{
        print("宽小于10")
    }
    
    • if 后面的条件只能是 Bool 类型
      在这里插入图片描述

    while

    var num = 5
    while num > 0 {
        print("num = \(num)")
        num -= 1
    }//打印了5次
    

    这里不用 num --,是因为从Swift3开始,去除了自增(++)、自减(–)运算符

    • repeat-while 相当于C语言中的do-while
    var num = -1
    repeat {
        print("num = \(num)")
    } while num > 0 //打印了一次
    

    for

    • 闭区间运算符:a…b,a <= 取值 <= b
    let nums = [1,2,3,4,5,6,7,8]
    
    for i in 0...4 {
        print(nums[i])
    }//1 2 3 4 5
    
    let range = 1...4
    for i in range {
        print(nums[i])
    }//2 3 4 5
    
    let a = 2
    let b = 4
    for i in a...b {
        print(nums[i])
    }//3 4 5
    
    for i in a...5 {
        print(nums[i])
    }//3 4 5 6
    
    // i默认是let,有需要时可以声明为var
    for var i in 1...4{
        i += 5
        print(i)
    } //6 7 8 9
    
    //i 在不使用时,可以用 _ 代替
    for _ in 1...3{
        print("输出")
    } //打印了3次
    
    • 半开区间运算符(包头不包尾):a…,a <= 取值 < b
    for i in 0..<5{
        print(i)
    }//0 1 2 3 4
    

    for - 区间运算符在数组上使用

    let nums = [1,2,3,4,5,6,7,8]
    
    for num in nums[0...3] {
        print(num)
    } //1 2 3 4
    
    • 单侧区间:让区间朝一个方向尽可能的远
    for num in nums[5...] {
        print(num)
    }//6 7 8
    
    for num in nums[...2] {
        print(num)
    }//1 2 3
    
    for num in nums[..<2] {
        print(num)
    }//1 2
    
    let range = ...3
    
    range.contains(2) //true
    range.contains(-2) //true
    range.contains(5) //false
    

    区间类型

    let range1: ClosedRange<Int> = 1...3
    let range2: Range<Int> = 1..<3
    let range3: PartialRangeThrough<Int> = ...3
    
    • 字符、字符串也能使用区间运算符,但默认不能用在for-in
    let stringRange1 = "cc"..."ff" // ClosedRange cd cf dz ....
    stringRange1.contains("cb") // false
    stringRange1.contains("dz") // true
    stringRange1.contains("fg") // false
    
    let stringRange2 = "a"..."f"
    stringRange2.contains("d") //true
    stringRange2.contains("h") //false
    
    //\0到~囊括了所有可能要用到的ASSCII字符
    let characterRange : ClosedRange<Character> = "\0"..."~"
    characterRange.contains("G") //true
    

    带间隔的区间值

    let hours = 11
    let hourInterval = 2
    //tickMark的取值:从4开始,累加2,不超过11
    for tickMark in stride(from: 4, through: hours, by: hourInterval){
        print(tickMark)
    }// 4 6 8 10
    

    switch

    • casedefault后面不能写大括号 { }
    var num = 1
    switch num {
    case 1:
        print("1")
        break
    case 2:
        print("2")
        break
    default:
        print("default")
        break
    }// 1
    
    • 默认可以不写break,并不会贯穿到后面的条件
    var num = 1
    switch num {
    case 1:
        print("1")
    case 2:
        print("2")
    default:
        print("default")
    }// 1
    

    fallthrough

    • 使用 fallthrough 可以实现贯穿效果
    var num = 1
    switch num {
    case 1:
        print("1")
        fallthrough
    case 2:
        print("2")
    default:
        print("default")
    }
    // 1
    // 2
    

    switch 注意点

    • switch 必须要保证能处理所有情况
      在这里插入图片描述
    • casedefault 后面至少要有一条语句
    • 如果不想做任何事,加个break 即可
    var num = 1
    switch num {
    case 1:
        print("1")
        fallthrough
    case 2:
        print("2")
    default:
        break
    }
    
    • 如果能保证已处理所有情况,也可以不必使用default
    enum Answer {case right, wrong}
    let answer = Answer.right
    switch answer {
    case Answer.right:
        print("right")
    case Answer.wrong:
        print("wrong")
    }
    
    // 由于已确定answer是Ansewer类型,因此可以省略Ansewer
    enum Answer {case right, wrong}
    let answer = Answer.right
    switch answer {
    case .right:
        print("right")
    case .wrong:
        print("wrong")
    }
    

    复合条件

    • switch 也支持 Character、String类型
    let string = "Jack"
    switch string {
    case "Jack":
        fallthrough
    case "Rose":
        print("Right person")
    default:
        break
    }//Right person
    
    let string = "Jack"
    switch string {
    case "Jack", "Rose":
        print("Right person")
    default:
        break
    }//Right person
    
    let character: Character = "a"
    switch character {
    case "a","A":
        print("The letter A")
    default:
        print("Not the letter A")
    }// The letter A
    

    区间匹配、元组匹配

    //区间匹配
    let count = 55
    switch count {
    case 0:
        print("0")
    case 1...5:
        print("1-5")
    case 5..<12:
        print("5-11")
    case 12..<100:
        print("12-99")
    case 100..<1000:
        print("100-999")
    default:
        print("many")
    }//12-99
    
    //元组匹配
    let point = (1, 1)
    switch point {
    case (0, 0):
        print("0 - 0")
    case (_, 0):
        print("x - 0")
    case (0, _):
        print("0 - y")
    case (-2...2, -2...2):
        print("inside the box")
    default:
        print("outside of the box")
    }//inside the box
    
    • 可以使用下划线 _ 忽略某个值
    • 关于 case 匹配问题,属于模式匹配(Pattern Matching)范畴

    值绑定

    let point = (2, 0)
    switch point {
    case (let x, 0):
        print("on the x-axis with an x value of \(x)")
    case (0, let y):
        print("on the y-axis with an y value of \(y)")
    case let (x, y):
        print("somewhere else at (\(x), \(y))")
    }//on the x-axis with an x value of 2
    
    • 必要时 let 也可以改为 var

    where

    let point = (1, -1)
    switch point {
    case let (x, y) where x == y:
        print("on the line x == y")
    case let (x, y) where x == -y:
        print("on the line x == -y")
    case let (x, y):
        print("(\(x), \(y)) is just some arbitrary point")
    }//on the line x == -y
    
    //where 可以与 for 循环一起使用
    //将所有正数加起来
    var numbers = [10, 20, -10, -20, 30, -30]
    var sum = 0
    for num in numbers where num > 0 {// 使用where来过滤num
        sum += num
    }
    print(sum)// 60
    

    标签语句

    outer : for i in 1...4 {
        for k in 1...4 {
            if k == 3 {
                continue outer
            }
            if i == 3 {
                break outer
            }
            print("i == \(i), k == \(k)")
        }
    }
    

    在这里插入图片描述

  • 相关阅读:
    R语言使用rbind函数将多个dataframe数据纵向合并起来创建dataframe数据、按照行合并dataframe
    基于JAVA网上零食进销存计算机毕业设计源码+数据库+lw文档+系统+部署
    Docker踩坑,又涨知识了
    [附源码]Python计算机毕业设计宠物领养系统
    redisson解决redis服务器的主从一致性问题
    Cisco ACL 中的通配符掩码详解
    PyQt5 | 手把手教你YOLOv5添加PyQt页面 | 3/3
    因为manifest.json文件引起的 android-chrome-192x192.png 404 (Not Found)
    Flask类视图和RESTful
    如何设计一个优惠券系统
  • 原文地址:https://blog.csdn.net/weixin_36162680/article/details/127039819