Swift5.2连载

Swift控制流(5)

2020-07-08  本文已影响0人  _菩提本无树_

教程目录
与OC一样的内容不重复介绍

控制流

由于好多内容在之前的例子中已经重复出现过很多次,所以部分内容不再重复.

2020.07.08(第一更)

ForIn循环

    /// forin循环
    func forIn() {
        
        //重复10次
        for _ in 1...10 {
            
        }
        
        //步进循环,间隔为5,从0-60,这个是开区间不算60
        for item in stride(from: 0, to: 60, by: 5) {
            print(item);
        }
        
        //步进循环,间隔为5,从0-60,这个是闭区间算60
        for item in stride(from: 0, through: 60, by: 5) {
            print(item);
        }
        
    }

数组,集合,字典的遍历移步目录去对应的模块寻找.

二.While循环语句

    /// while循环
    func whileFunc() {
        
        //第一种先判断再执行
        var status = true;
        while status {
            print("true")
        }
        
        //第二种先执行再判断,OC中的do while语句
        repeat{
            
            print("true");
            
        }while status;
        
    }

三.条件语句

if语句很简单,没什么新的东西,忽略
switch语句

相对于OCswitch语句其实没什么变化,之前也没写过这里写一下.
swift中的break可以忽略,因为已经隐式的添加了.
每一个 case 分支都必须包含至少一条语句.
在switch中定义的变量在外部不能使用.

    /// switch语句
    func switchFunc() {
        
        //字符
        let char:Character = "z";
        
        switch char {
        case "a":
            print("a")
        case "z","Z":
            print("z")
        default:
            print("z")
        };
        
        //区间匹配
        let num = arc4random()%250;
        
        switch num {
        case 0:
            print("0");
        case 1..<50:
            print("1-50")
        case 50..<100:
            print("50-100")
        case 100..<150:
            print("150-200")
        case 150..<200:
            print("200-250")
        default:
            print("10")
        }
        
        //元组,遍历元组时注意元素内的数量和类型要对上
        let tuple = (1,"2");
        switch tuple {
        case (1,"3"):
            print("假")
        case (1,"2"):
            print("真")
        case (1,"1"):
            print("假")
        case (1,"4"):
            print("假")
        default:
            print("假")
        }
        
        //值绑定,这是神奇的东西,说实话第一次用
        //理解下来就是对比,case语句中已知的内容除了未知的就是下面的x,y,z,如果能和point对上那么就执行这个case
        let point = (1,3,2)//执行第一个case
//        let point = (1,3,3)//执行第二个case
//        let point = (1,3,4)//执行第三个case
//        let point = (4,5,7)//执行第五个case,这个case相当于是默认的
        switch point {
        case (let x,3,2):
            print(x);
        case (let x,3,let z):
                print(x);
        case (1,3,let z):
            print(z);
        case (1,let y,2):
            print(y);
        case (let x,let y,let z):
            print(x);
        }

        //使用where,对内容进行进一步判断,方便很多相比与if
        let wherePoint = (arc4random()%10,arc4random()%10);
        
        switch wherePoint {
        case (let x,let y) where x == y:
            print("1");
        case (let x,let y) where x < y:
            print("2");
        case (let x,let y) where x > y:
            print("3");
        case (let x,let y):
            print("4");
        }
          
   }

四.控制转移语句

    /// 控制转移语句
    func otherFunc() {
        //Fallthrough贯穿,值得是在switch语句中不让程序碰到合适的条件停止,而是继续执行,请看下面的代码
        //注意⚠️fallthrough 关键字不会检查它下一个将会落入执行的 case 中的匹配条件,下面会打印a,A
        let a = "a";
        
        switch a {
        case "a":
            print("a")
            fallthrough
        case "b":
            print("A")
            
        default:
            print("c")
        }
        
        
        //标签语法,有点像是封装,其实这个语法说实用也实用说不实用也行,为什么?因为他其实是把系统的某个函数给包装了起来.相当于一个func了
        //举例如下
        
        var num = 0;
        let allNum = 100;
        loop : while num != allNum {
            
            let typeNum = Int(arc4random()%10);
            switch typeNum+num {
            case allNum:
                print(typeNum);
                num += typeNum;
                print("游戏结束");
            case typeNum+num where num+typeNum > allNum:
//                print("游戏异常,此轮不算,重新算");
                continue loop;
            default:
                print(typeNum);
                num += typeNum;
            }
            
        }
        print(num);//结果肯定是100
        
        //guard语句
        let c = 0;
        let d = 12;
        guard c == d else {
            return;
        }
        print("执行");
        //上面这句代码永远不执行,为啥?因为当c = 0时c == d永远不成立,所以直接进else语句
        //当c等于12时会打印执行
           
    }

控制流更新完毕,更多精彩内容见目录本文完整代码地址

上一篇下一篇

猜你喜欢

热点阅读