• swift基础语法(15- Switch)


     
    格式: switch(需要匹配的值) case 匹配的值: 需要执行的语句 break;
          可以穿透
          可以不写default
          default位置可以随便放
          在case中定义变量需要加大括号, 否则作用域混乱
          不能判断对象类型
    OC:
    char rank = 'A';
    switch (rank) {
        case 'A':
            NSLog(@"优");
            break;
        case 'B':
            NSLog(@"良");
            break;
        case 'C':
            NSLog(@"差");
            break;
        default:
            NSLog(@"没有评级");
            break;
    }
    输出结果:
     
    可以穿透
    char rank = 'A';
    switch (rank) {
        case 'A':
            NSLog(@"优");
        case 'B':
            NSLog(@"良");
            break;
        case 'C':
            NSLog(@"差");
            break;
        default:
            NSLog(@"没有评级");
            break;
    }
    输出结果:
    2016-04-01 20:15:41.643 OCTest[6617:1852944]
    2016-04-01 20:15:41.644 OCTest[6617:1852944] 良
     
    可以不写default
    char rank = 'A';
    switch (rank) {
        case 'A':
            NSLog(@"优");
            break;
        case 'B':
            NSLog(@"良");
            break;
        case 'C':
            NSLog(@"差");
            break;
    }
    输出结果:
    2016-04-01 20:16:30.171 OCTest[6629:1860297]
     
     
    default位置可以随便放
    char rank = 'E';
    switch (rank) {
        default:
            NSLog(@"没有评级");
            break;
        case 'A':
        {
            int score = 100;
            NSLog(@"优");
            break;
        }
        case 'B':
            NSLog(@"良");
            break;
        case 'C':
            NSLog(@"差");
            break;
    }
    输出结果:
    2016-04-01 20:17:14.444 OCTest[6639:1866501] 没有评级
     
    case中定义变量需要加大括号, 否则作用域混乱
    char rank = 'A';
    switch (rank) {
        case 'A':
        {
            int score = 100;
            NSLog(@"优");
            break;
        }
        case 'B':
            NSLog(@"良");
            break;
        case 'C':
            NSLog(@"差");
            break;
    }
    输出结果:
    2016-04-01 20:17:56.849 OCTest[6649:1872272]
     
    不能判断对象类型
    以下写法是错误的
    NSNumber *num = @100;
    switch (num) {
           
        case @100:
            NSLog(@"优");
            break;
        default:
            NSLog(@"没有评级");
            break;
    }
     
    Swift:
    Swift: 可以判断对象类型, OC必须是整数
             不可以穿透
           可以不写break
           不能不写default
           default位置只能在最后
           在case中定义变量不用加大括号
     
    var rank = "A"
    switch rank{
    case "A": 相当于if
        print("优")
    case "B":  相当于else if
        print("优")
    case "C":  相当于else if
        print("优")
    default:  相当于else
        print("没有评级")
    }
     
    因为不能穿透所以不能这么写
    以下写法是错误的:
    var rank1 = "A"
    switch rank1{
    case "A":
    case "B":
        print("优")
    case "C":
        print("优")
    default:
        print("没有评级")
    }
     
    只能这么写
    var rank1 = "A"
    switch rank1{
    case "A", "B":  注意OC不能这样写
        print("优")
    case "C":
        print("差")
    default:
        print("没有评级")
    }
     
    不能不写default
    以下写法是错误的:
    var rank2 = "A"
    switch rank2{
    case "A":
        print("优")
    case "B":
        print("良")
    case "C":
        print("差")
    }
     
    default位置只能在最后
    以下写法是错误的:
    var rank3 = "A"
    switch rank3{
    default:
        print("没有评级")
    case "A":
        print("优")
    case "B":
        print("良")
    case "C":
        print("差")
    }
     
    case中定义变量不用加大括号
    var rank4 = "A"
    switch rank4{
        case "A":
            var num = 10
            print("优")
        case "B":
            print("良")
        case "C":
            print("差")
        default:
            print("没有评级")
    }
     
    输出结果:
     
    区间和元祖匹配
    var num = 10;
    switch num{
    case 1...9:
        print("个位数")
    case 10...99:
        print("十位数")
    default:
        print("其它数")
    }
    输出结果: 十位数
    var point = (10, 15)
    switch point{
    case (0, 0):
        print("坐标在原点")
    case (1...10, 10...20):  可以在元祖中再加上区间
        print("坐标的X和Y在1~10之间")
    case (_, 0):  X可以是任意数
        print("坐标的X在X轴上")
    default:
        print("Other")
    }
    输出结果: 坐标的XY1~10之间
     
     
    值绑定
    var point = (1, 10)
    switch point{
    case (var x, 10):  会将point中X的值赋值给X
        print("x= (x)")
    case (var x, var y):  会将point中XY的值赋值给XY
        print("x= (x) y= (y)")
    case var( x, y):
        print("x= (x) y= (y)")
    default:
        print("Other")
    }
    输出结果:
    x= 1
    根据条件绑定
    var point = (100, 10)
    switch point{
         只有where后面的条件表达式为真才赋值并执行case后的语句
    case var(x, y) where x > y:
        print("x= (x) y= (y)")
    default:
        print("Other")
    }
     
    输出结果: x= 100 y= 10
     
     
     
     
     
     
     
     
     
    我们每一种习惯都是由一再重复的行为所铸造的,因此,优秀不是一种行为,而是一种习惯.
  • 相关阅读:
    opengl学习
    同步、异步、多线程与事件型综述
    Javascript异步编程的4种方法
    ASP.NET(C#) GridView (编辑、删除、更新、取消)
    浅析五大ASP.NET数据控件
    用 Eclipse 开发 Android 应用程序
    [C# 网络编程系列]专题十:实现简单的邮件收发器
    [C# 网络编程系列]专题九:实现类似QQ的即时通信程序
    [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现
    [C# 网络编程系列]专题六:UDP编程
  • 原文地址:https://www.cnblogs.com/jordanYang/p/5378347.html
Copyright © 2020-2023  润新知