您的位置:首页 > 其它

switch

2015-08-07 03:36 369 查看
for i
in 0...10{

switch i{

case 0:

print(i)

break

case 1:

print("能不能继续走2")

case 2:

print("2走了")

break

case 3,4:

print(i)

case 5:

print(i)

break

//使用新的关键字fallthrough能使Switch在执行完一个case之后,紧接着执行下一条case。

case 6:

print(i)

fallthrough

//fallthrough并不是在任何情况下都有效,当你在Switch里使用ValueBinding技术的时候,fallthrough就被禁止了。Value
Binding在下面会讲到。

case 7:

print(i)

break

case :1.5

break

//Swift的Switch语句一定要涵盖所有的情况,这并不是说一定要有default,只要上面的case能满足所有的情况,就可以不用写default。

default:

print("default\(i)")

break

//Switch当然也支持显式的break,通常只有一种情况下你会这么做,那就是当你也不想在default里做任何事情的时候,这个时候你就可以在default里显式地加上一句break。

}

}

//在Objective-C里,Switch语句只能支持整形的数据(或者一个字符),但是在Swift里,Switch能支持多种数据类型,包括浮点、布尔、字符串等.可以说是史上支持数据类型最多的Switch了。
//支持浮点:
let float =
1.5
switch
float {

case 1.5:

"1.5"

default:

"default"
}
//支持布尔:
let isSuccess =
true
switch
isSuccess {

case true:

"true"
//被输出

default:

"default"
}
//支持字符串:
let name =
"Bannings"

switch name {

case "Bannings":

"Bannings"
//被输出

default:

"default"
}

//支持区间运算符
不仅仅是循环结构里可以用区间运算符,在Switch里同样可以用区间运算符:
var i =
15

switch i {

case 0 ...
10:

"0~10"

case 11 ...
20:

"11~20"
//被输出

default:

"default"
}

//支持元组
作为被大大增强的Switch,元组也是被支持的:
let request = (true,"success")
switch
request {

case (true,
"success"):

"success"
//被输出

case (false,
"failed"):

"failed"

default:

"default"
}

//使用元组和使用其他数据类型一致,不过元组还有一项特点,对于不想关心的值,可以用下划线_跳过,如:
let (name2,
_,age2) = ("Bannings" ,true,
22)
let request2 = (true,"success")
switch
request2 {
case (_,
"success"):

"success"
//被输出
case (false,
_):

"failed"
default:

"default"
}
//对于不关心的值跳过,只要满足另一个值就行了。需要注意一点的是,如果元组中的值也是数字类型,那么也是可以用区间运算符的:
let request3 = (10,"failed")
switch
request3 {
case (_,
"success"):

"success"
case (1 ...
10, _):

"1~10"
//被输出
default:

"default"
}

//ValueBinding
//针对元组,Switch还支持类似于Optional
Binding的Value Binding,就是能把元组中的各个值提取出来,然后直接在下面使用:
let requestBinding = (0,"success")
switch
requestBinding {
case (0,
let state):
state
//被输出:success
case (leterrorCode,
_):

"errorcode is \(errorCode)"
}
// 涵盖了所有可能的case,不用写default了
//这样也是可以的:
let requestBinding2 = (0,"success")
switch
requestBinding2 {
case
let(errorCode, state):
state
//被输出:success
case (leterrorCode,
_):

"errorcode is \(errorCode)"
}
//把let放在外面和放在里面为每一个元素单独写上let是等价的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: