美文网首页Swift开发iOS学习笔记iOS学习开发
Swift学习_基础语法之条件语句&循环语句

Swift学习_基础语法之条件语句&循环语句

作者: CN_HarrySun | 来源:发表于2017-01-04 15:11 被阅读120次
    Swift

    ** 实现梦想没那么伟大,80%的人只是输给了半途而废。—— CoderSun **

    1.if相关的条件语句

    swift的条件语句在写法和新功能有什么特殊的,让我们一起来了解一下吧。

    1) if语句
    • if 条件语句 {} 这里条件语句的值必须是Bool类型,Bool类型就两个值,要么是true和false,这和c/oc不一样,不像他们非0就真,这里必须是一个Bool值

    • 这里条件语句可以不用小括号()包起来,当然包起来也是可以编译通过的,下面例子

    • 这里的{}是不能省略的,这和oc不一样,oc是在条件语句之后如果只有一条执行语句的时候,可以省去{},但是在swift里。不管几条执行语句必须带有{}

    let result:Bool = true
    if result {  
        print("有结果的")      // 输出 有结果的
    }
    
    if (result) {
        print("有结果的")      // 输出 有结果的
    }
    
    // if result
    // print("hi")      // 这里省略会编译报错
    
    2) if else

    这块看一眼就行,很简单

    if result {
        print("有结果的")      // 输出 有结果的
    }else{
        print("没结果的")
    }
    
    3) else-if
    var age = 20
    
    if age > 65 {
    
        print("老年人")
    }else if age > 40{
    
        print("中年人")
    }else if age > 20{
    
        print("青年人")
    }else{
    
        print("少年")
    }
    // 输出少年
    
    4) if let
    let oAge:Int? = 20
    
    if let age = oAge {
    
        print("有值")      // 输出 有值
    }
    
    5) guard语句

    学这个语句开始貌似没啥用处,但是网上看到一个哥们提到:guard只有在条件不满足的时候才会执行这段代码。你可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。

    var numA = 10
    
    //guard numA > 100 else {
    //
    //    print("numA 不大于100")
    //    break
    //}
    
    
    
    func getAge(age:Int?)
    {
        if age == nil || age! < 0 {
        
            return
        }
    }
    
    
    func getAge2(age:Int?)
    {
        guard age! < 0 else {
            print("xxxxxx");    // 输出 xxxxxx
            return;
        }
    }
    
    var age3:Int? = 30
    getAge2(age: age3)
    
    
    
    
    func getName(name:String)
    {
    
        if name.characters.count > 100 {
        
        }else{
        
            print("字符串太长")
        }
    }
    
    
    func getName2(name:String)
    {
    
        guard name.characters.count < 100 else {
            return
        }
        print("字符串太长")    // 输出 字符串太长
    }
    
    getName2(name: "HarrySun")
    

    注意:guard 在else中一定要有返回语句,与return、break、continue、throw要退出的关键字结合使用

    2.switch

    swift会自动在case结尾处加上break

    /*
     switch (表达式) {
     case 常量表达式1:
     语句1
     case 常量表达式2:
     语句2
     case 常量表达式3:
     语句3
     default:
     语句n
     }
    表达式可以为多种数据类型,整形、字符串、布尔、浮点型、元组等,也支持区间运算符
    */
    
    1) 支持元组类型
    let coordinate1 = (0,1)
    
    switch coordinate1 {
    case (0,0):
        print("原点")
    case (_,0):
        print("x轴")
    case (0,_):
        print("x轴")
    default:
        print("没有到达这个区域")
    }
    // 输出 x轴
    // 如果上面的case没有列举完全,那就必须用default包含未包含的部分,如果把下面的default注释掉会报错
    

    下面在不用default的条件下把所有情况包括

    switch coordinate1 {
    case (0,0):
    print("原点")
    case (let x,0):
        print("x轴")
    case (0,let y):
        print("x轴")
    case (let x,let y):
        print("非原点和x轴有轴之外的点")
    }
    // 输出 x轴
    
    // 下面这个代码   会报Case will never be executed这个错
    switch coordinate1 {
    case (let x,let y):
        print("所有区域")      // 输出 所有区域   // 下面case不被执行
    case (0,0):         
        print("原点")
    case (let x,0):
        print("x轴")
    case (0,let y):
        print("x轴")
    }
    
    2) 字符串
    let str:String = "HarrySun"
    switch str {
    case "lianglinag":
        print("liangliang")
    case "HarrySun":
        print("HarrySun")     // 输出 HarrySun
    default:
        print("haozi")
    }
    
    3) 浮点
    let width = 2.4
    switch width {
    case 1.4:
        print(1.4)
    case 2.4:
        print(2.4)    // 输出 2.4
    case 3.4:
        print(3.4)
    default:
        print("没找到")
    }
    
    4) 区间
    var i = 15
    switch i {
    case 0 ... 10:
        print("0~10")
    case 11 ... 20:
        print("11~20")     // 输出 11~20
    default:
        print("default")
    }
    
    5) fallthrough

    fallthrough关键字表示继续往下判断

    let age = 18
    
    switch age {
    case 10...20:
        print("1")        // 被输出
        fallthrough
    case 15...30:
        print("2")        // 被输出
    default:
        print("3")
    }
    //  输出 1  2
    

    注意:加了fallthrough语句后,【紧跟的后一个】case条件不能定义常量和变量

    switch coordinate1 {
    case (0,0):
        print("原点")
    //    fallthrough  // 加了fallthrough 紧跟后面的一个case有定义常量,就会报 'fallthrough' cannot transfer control to a case label that declares variables这个错
    case (let x,0):
        print("x轴")
    case (0,let y):
        print("x轴")
    case (let x,let y):
        print("非原点和x轴有轴之外的点")    
    }
    // 输出 x轴
    

    3.循环语句

    1) for-in循坏
    var num = 0
    for i in 1...3 {
    
        num += i
    }
    //i 只能在{}内访问
    print(num)    // 输出 6
    

    如果知道区间内的每一项的值,可以使用下划线_来替代变量名忽略对值得访问

    let base = 3
    let power = 10
    var answer = 1
    for _ in 1...power {
    
        answer *= base
    }
    
    print(answer)    // 输出 59049
    
    2) while 循坏

    while 循坏是先判断在执行

    var a = 10
    var b = 20
    while a < 20 {
        a += 1
        print("增加1")    
    }
    
    3) repeat-while

    repeat-while 就是咱们之前用的do-while,先执行一次,在进行判断

    repeat{
    
        print("执行")
    }while b < 20
    
    //b不小于20先执行一次里面的语句
    

    4.关于条件和循环的编程题

    1) 寻找100~999之间的水仙花数
    for i in 100...999 {
    
        var a = i/100
        var b = i%100/10
        var c = i%10
    
        if (a*a*a + b*b*b + c*c*c == i) {
            print(i);    
        }    
    }
    // 输出 153  370  371  407
    
    2) 实现对1+3+5+7...+99的求和功能
    var sum = 0
    for i in 1...99 {
    
        if i%2 == 1 {
        
            sum += i
        }
    }
    print(sum)    // 输出 2500
    

    小结

    代码已上传至git:
    --> 传送门:Swift_基本语法

    附录

    查看完整专栏《Swift学习》

    有问题欢迎指正以及相互探讨 —— CoderSun

    相关文章

      网友评论

        本文标题:Swift学习_基础语法之条件语句&循环语句

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