Swift编程中的switch...case语句实例解析

前端技术 2023/09/08 IOS

Swift中的switch...case语句可以判断对象类型, Objective-C中则必须是整数。
不可以穿透,可以不写break,

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\")
}

值绑定

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\")
}

根据条件绑定

var point = (100, 10)
switch point{
  // 只有where后面的条件表达式为真才赋值并执行case后的语句
  case var(x, y) where x > y: 
    print(\"x= \\(x) y= \\(y)\")
  default:
    print(\"Other\")
}

fallthrough关键字
Swift语言中的switch不会从上一个case分支落入到下一个case分支中。相反,只要第一个匹配到的case分支完成了它需要执行的语句,整个switch代码块完成了它的执行。相比之下,C语言要求你显示的插入break语句到每个switch分支的末尾来阻止自动落入到下一个case分支中。Swift语言的这种避免默认落入到下一个分支中的特性意味着它的switch 功能要比C语言的更加清晰和可预测,可以避免无意识地执行多个case分支从而引发的错误。
 
如果你确实需要C风格的落入(fallthrough)的特性,你可以在每个需要该特性的case分支中使用fallthrough关键字。下面的例子使用fallthrough来创建一个数字的描述语句。

let integerToDescribe = 5 
var description = \"The number \\(integerToDescribe) is\" 
switch integerToDescribe { 
case 2, 3, 5, 7, 11, 13, 17, 19: 
  description += \" a prime number, and also\" 
  fallthrough 
default: 
  description += \" an integer.\" 
} 
println(description) 
// prints \"The number 5 is a prime number, and also an integer.\" 

这个例子定义了一个String类型的变量description并且给它设置了一个初始值。函数使用switch逻辑来判断integerToDescribe变量的值。当integerToDescribe的值属于列表中的质数之一时,该函数添加一段文字在description后,来表明这个是数字是一个质数。然后它使用fallthrough关键字来\"落入\"到default分支中。default分支添加一段额外的文字在description的最后,至此switch代码块执行完了。
 
如果integerToDescribe的值不属于列表中的任何质数,那么它不会匹配到第一个switch分支。而这里没有其他特别的分支情况,所以integerToDescribe匹配到包含所有的default分支中。
 
当switch代码块执行完后,使用println函数打印该数字的描述。在这个例子中,数字5被准确的识别为了一个质数。
 
NOTE:fallthrough关键字不会检查它下一个将会落入执行的case中的匹配条件。fallthrough简单地使代码执行继续连接到下一个case中的执行代码,这和C语言标准中的switch语句特性是一样的。

本文地址:https://www.stayed.cn/item/20780

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。