美文网首页Swift
Swift基础语法(二)条件控制语句的认识

Swift基础语法(二)条件控制语句的认识

作者: iOS之文一 | 来源:发表于2022-01-22 23:54 被阅读0次

    Swift基础语法文章汇总

    本章开始学习条件控制语句,包括if、while、for、Switch、guard语句。

    主要内容:

    1. if分支语句
    2. while循环语句
    3. for循环
    4. Switch语句
    5. guard语句

    1、if分支语句

    代码示例:

    let age = 4
    if age >= 5 {
        print("大于22")
    } else if age < 5 {
        print("小于5")
    }
    

    说明:

    • 比较的值为4,小于5,所以会打印“小于5”
    • if后面的条件可以省略小括号()
    • 条件后面的大括号{}不可以省略

    注意:

    • if后面的条件必须是bool类型,这个与OC不一样

    2、while循环语句

    代码示例:

    //while循环
    var num = 5
    while num > 0 {
        print("num is \(num)")
        num -= 1
    }
    
    //repeat...while循环
    var num2 = -1
    repeat {
        print("num is \(num)")
    } while num > 0
    

    说明:

    • 有两种方式,一种是while循环,一种是repeat...while循环
    • repeat...while循环就完全可以看做do...while

    注意:

    • 注意在swift中没有自增和自减运算符,所以只能使用num -= 1 来自减

    3、for循环语句

    Swift给我们显式的提供了for循环的区间,并且增加很多范围区间的种类,对于for循环有跟多的可操作性

    3.1 显式区间

    可以显式的设置区间的范围

    闭区间:

    /*
     1、简单循环获取i值(变量)
     */
    for var i in 1...3 {
        i += 5
        print(i)
    }
    
    /*
     2、循环获取数组值
     */
    let name = ["A","B","C"]
    for i in 0...3 {
        print(name[i])
    }
    
    /*
     3、可以将区间设置为变量来使用
     */
    let range = 1...3
    for i in range {
        print(name[i])
    }
    
    /*
     4、也可以用变量分开设置区间的左右范围
     */
    let a = 1
    var b = 2
    for i in a...b {
        print(name[i])
    }
    
    /*
     5、不获取变量值
     */
    for _ in 1...3 {
        print("WY")
    }
    

    说明:

    • 在使用上就是直接通过a...b这种方式来设置for循环的区间,这种属于闭区间,表示a<= 取值 <= b
    • 我们可以直接将左右区间的范围写死,也可以使用变量来动态设置
    • 甚至可以将区间整个赋值给一个变量,后续循环时使用这个变量
    • 循环拿到的值默认是常量let,是无法再次赋值的,如果想要再次赋值,就需要设置为变量var
    • 如果不需要获取循环的变量值,可以使用_来表示,这样就可以节省栈空间

    半开区间:

    /*
     半开区间
     */
    for i in 1..<5 {
        print(i)
    }
    

    说明:

    • 在使用上就是直接通过a..<b(a<..b)这种方式来设置for循环的区间,这种属于半开区间,表示a<= 取值 < b (a< 取值 <= b)

    3.2 增强for

    区间运算符直接作用在数组上。

    实例代码:

    /*
     1、直接获取数组中的数据
     */
    let names = ["A","B","C"]
    for name in names[0...3] {
        print(name)
    }
    

    单侧区间:

    让区间朝一个方向尽可能远

    /*
     2、单侧区间
     */
    for name in names[1...] {
        print(name)
    }
    

    说明:

    • 单侧区间就是只设置其中一侧的范围,另一侧是无限远
    • 当然不可能是真的无限远,否则就死循环了,而是到达数组的最大下标

    3.3 设置区间类型

    Swift内置了区间类型供我们方便使用

    var range1: ClosedRange<Int> = 1...3
    var range2: Range<Int> = 1..<3
    var range3: PartialRangeThrough<Int> = ...5
    
    range1 = 2...4
    
    for i in range1 {
        print(i)
    }
    

    说明:

    • Swift提供了很多内置的区间类型,我们可以使用这些类型创建区间变量进行使用

    注意:

    • 字符、字符串也能使用区间运算符,但是默认不能用在for- in中
    let stringRange = "a"..."f"
    stringRange.contains("d")//true
    stringRange.contains("h")//false
    

    3.4 where过滤变量值

    代码示例:

    /*
     where过滤
     */
    var numbers = [10,20,-11,-22]
    var sum = 0
    for num in numbers where num > 0 {
        sum += num
    }
    print(sum)
    

    说明:

    • 可以看到会使用num>0增加了for循环的判断

    3.5 设置区间间隔

    代码示例:

    let hours = 10
    let hourInterval = 2
    //tickMark的取值:从4开始,累加2,到达10结束,包含10
    for tickMark in stride(from: 4, through: hours, by: hourInterval){
        print(tickMark)
    }//4,6,8,10
    
    //tickMark的取值:从4开始,累加2,到达10结束,不包含10
    for tickMark in stride(from: 4, to: hours, by: hourInterval){
        print(tickMark)
    }//4,6,8
    

    说明:

    • 可以分别设置累加值和终止值
    • 终止值有两种,如果是through,则包含最后一个值,如果是to则不包含

    4、Switch语句

    4.1 基础用法

    代码示例:

    /*
     1、基础写法
     */
    var number = 1
    switch number {
    case 1:
        print("number is 1")
        break
    case 2:
        print("number is 1")
        break
    default:
        print("number is other")
        break
    }
    
    /*
     2、fallthrouth
     */
    switch number {
    case 1:
        print("number is 1")
        fallthrough
    case 2:
        print("number is 1")
    default:
        print("number is other")
    }
    
    /*
     3、支持Character、String类型
     */
    var str = "WY"
    switch str {
    case "A":
        print("A")
    case "B":
        print("B")
    case "WY":
        print("WY")
    default:
        break
    }
    

    说明:

    • case、default后面不能写大括号{}
    • 与其他语言不一样的是默认已经有break,所以可以显式的写breake,不写也不会贯穿到后面条件
    • 如果我们想要实现贯穿效果,需要加上fallthrough
    • 需要注意的是switch也支持Character、String类型

    注意:

    • switch必须要能够实现处理所有的情况,其他情况可以放在default,如果已经确定已经包含所有情况,是可以不写default的
    • case、default后面至少要有一条语句,如果不想做任何事情,就可以加个break

    4.2 匹配类型

    4.2.1 组合条件匹配

    代码示例:

    /*
     组合匹配
     */
    var str = "WY"
    switch str {
    case "A":
        print("A")
    case "B","WY":
        print("B or WY")
    default:
        break
    }//B or WY
    

    说明:

    • 可以有多个条件组合匹配,中间用,分割

    4.2.2 区间匹配

    代码示例:

    /*
     2、区间匹配
     */
    let count = 60
    switch count {
    case 0:
        print("none")
    case 1..<60:
        print("a few")
    case 10...100:
        print("dozens of")
    default:
        print("other")
    }//dozens of
    

    说明:

    • 可以设置闭区间或半开区间来判断值的范围

    4.2.3 元组匹配

    代码示例:

    /*
     3、元组匹配
     */
    let point = (1,1)
    switch point {
    case (0,0):
        print("the origin")
    case (_,0):
        print("on the x-axis")
    case (0,_):
        print("on the y-axis")
    case (-2...2,-2...2):
        print("inside the 2*2 box")
    default:
        print("outside of the box")
    }//inside the 2*2 box
    

    说明:

    • 判断的类型也可以是元组,元组是否在这个区间内
    • 可以使用下划线_忽略这个值

    4.2.4 模式匹配

    也可以使用模式匹配方式进行更大范围的匹配
    代码示例:

    
    

    说明:

    4.2.5 值绑定

    可以在匹配的过程中获取其中的某个值
    代码示例:

    /*
     5、值绑定
     */
    let point2 = (2,0)
    switch point {
    case (let x,0):
        print("on the x-axis with an x value of \(x)")
    case (0,var y):
        y += 2
        print("on the x-axis with an x value of \(y)")
    default:
        break
    }// on the x-axis with an x value of 2
    

    说明:

    • 此处我们在匹配元组时,只匹配了其中一个值,另一个值是用来获取的。

    4.3 where过滤

    代码示例:

    let point3 = (1,-1)
    switch point3 {
    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("other")
    }//on the line x == -y
    

    说明:

    • 可以通过where增加判断条件

    5、Guard语句

    主要用于提前退出,条件不符合的时候退出,判断值是否成立用它就很方便了

    代码示例:

    func test(v: Bool) {
        guard v else {
            print("当条件为false时进入")
            return
        }
        print("当条件为true时进入")
    }
    test(v: true)
    test(v: false)
    

    说明:

    • 当guard语句的条件为false时,就会执行大括号里面的代码
    • 当guard语句的条件为true时,就会跳过guard语句
    • guard语句特别适合用来“提前退出”

    相关文章

      网友评论

        本文标题:Swift基础语法(二)条件控制语句的认识

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