详解Swift的ase语句中break关键字的⽤法
与Objective-C中这部分内容相⽐,在Swift中switch得到了极⼤的改善。这是⼀件⾮常有趣的事,因为这还是没有添加到Objective-C中,还是没有打破Objective-C是C的超集的事实。
第⼀件令⼈兴奋的地⽅是可以对字符串转换。这也许正是你之前想要做,却不能做的事。在Objective-C中如果要对字符串⽤“switch”,你必须要使⽤多个if语句,同时要⽤isEqualToString:,像下⾯这样:
if ([person.name isEqualToString:@"Matt Galloway"]) {
NSLog(@"Author of an interesting Swift article");
} else if ([person.name isEqualToString:@"Ray Wenderlich"]) {
NSLog(@"Has a great website");
} else if ([person.name isEqualToString:@"Tim Cook"]) {
switch语句必须使用break吗NSLog(@"CEO of Apple Inc.");
} else {
NSLog(@"Someone else);
}
这样可阅读性不强,也要打很多字。同样的功能在Swift中实现如下:
switch person.name {
case "Matt Galloway":
println("Author of an interesting Swift article")
case "Ray Wenderlich":
println("Has a great website")
case "Tim Cook":
println("CEO of Apple Inc.")
default:
println("Someone else")
}
除了对字符串可以使⽤switch之外,请注意这⾥⼀些有趣的事情。没有看见break。因为在switch中⼀个case语句执⾏完成后就不再向下执⾏。不会再偶然地出现bug!
再⽐如这样的情况下
let vegetable = "red pepper"
switch vegetable{
case "celery":
let vegetableComment = "Add some raisins and make ants on a log."
case "cucumber","watercress":
let vegetableComment = "That would make a good tea sandwich."
/
/switch⽀持所有类型的数据,以及多种⽐较运算——没有限制为必须是整数,也没有限制为必须测试相等(tests for equality 真的是这样翻译的吗?)
case let x where x.hasSuffix("pepper"):
let vagetableComment = "Is it a spicy \(x)?"
//switch语句要求必须覆盖所有的可能,否则报错'switch must be exhaustive, consider adding a default cla'
default:
print("不能没有default")
}
不需要写break,
执⾏完匹配到的case后,程序会跳出switch,⽽不是继续执⾏下⼀个case,所以不需要在case的代码后⾯添加break来跳出switch。
下⾯的switch语句可能会扰乱你的思路,所以准备好了!
switch i {
case 0, 1, 2:
println("Small")
7:
println("Medium")
case 8..10:
println("Large")
case _ where i % 2 == 0:
println("Even")
case _ where i % 2 == 1:
println("Odd")
default:
break
}
⾸先,这出现了⼀个break。因为switch必须要全⾯⽽彻底,它们需要处理所有的情况。在这种情况下,我们想要default时不做任何事,所以放置了⼀个break来表明此处不应该发⽣任何事。
接下来有趣的事情是你在上⾯看到的…和..,这些是新的操作符,⽤于来定义范围。前者⽤来定义范围包括右边的数字,后者定义的范围不包括右边的数字。它们真是超乎想象地有⽤。
最后⼀件事是可以把case定义成对输⼊值的计算。在上⾯这种情况下,如果这个值不匹配从0到10,如果是偶数打印“Even”,是奇数打印“Odd”。太神奇了!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。