详解Swift的switch...case语句中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"]) {
 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")
case 3...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”。太神奇了!

(0)

相关推荐

  • Swift中switch语句区间和元组模式匹配

    废话不多说了,下面一段代码给大家介绍了switch语句区间和元组模式匹配,具体内容如下所示: // switch 的广义匹配 let x = 1000 // 也就是说并没有像C语言那样 要求 switch 后面的是整数常量 switch x { // case后面可以跟区间啦 case 1...9: print("个位数") case 10...99: print("十位数") case 100...999: print("百位数") case

  • 举例讲解Swift编程中switch...case语句的用法

    Switch作为选择结构中必不可少的语句也被加入到了Swift中,只要有过编程经验的人对Switch语句都不会感到陌生,但苹果对Switch进行了大大的增强,使其拥有其他语言中没有的特性.使用Switch语句很简单: var i = 0 switch i { case 0: "0" //被输出 case 1: "1" default: "2" } 在这个最简单的Switch语句中,与其他语言很不同的一点是:不用显式的加上break.Swift的S

  • Swift中swift中的switch 语句

    废话不多说了,直接给大家贴代码了,具体代码如下所示: /** switch 语句 */ let str = "aAbBacdef" let str2 = "aAbBadef" let str3 = "aAbBadeff" // var array = []; for c in ["A", "a", str3] { switch c { // case "a": case "a&

  • 简单了解Swift语言中的break和continue语句的用法

    break语句 在 C 编程语言中的 break 语句有以下两种用法: 当在循环中遇到 break 语句, 循环立即终止,程序控制继续循环语句的后面(退出循环). 它可用于终止在switch语句(在下一章节)的情况(case). 如果使用嵌套循环(即,一个循环在另一个循环), break语句将停止最内层循环的执行,并开始执行下一行代码块之后的代码块. 语法 在Swift 编程中的 break语句的语法如下: 复制代码 代码如下: break 流程图 实例 复制代码 代码如下: import Co

  • Swift流程控制之循环语句和判断语句详解

    Swift提供了所有c类语言的控制流结构.包括for和while循环来执行一个任务多次:if和switch语句来执行确定的条件下不同的分支的代码:break和continue关键字能将运行流程转到你代码的另一个点上. 除了C语言传统的for-condition-increment循环,Swift加入了for-in循环,能更加容易的遍历arrays, dictionaries, ranges, strings等其他序列类型. Swift的switch语句也比C语言的要强大很多. Swift中swi

  • 浅谈Swift编程中switch与fallthrough语句的使用

    在 Swift 中的 switch 语句,只要第一个匹配的情况(case) 完成执行,而不是通过随后的情况(case)的底部,如它在 C 和 C++ 编程语言中的那样.以下是 C 和 C++ 的 switch 语句的通用语法: 复制代码 代码如下: switch(expression){    case constant-expression  :       statement(s);       break; /* optional */    case constant-expressio

  • Swift开发中switch语句值绑定模式

    Switch简介 Switch作为选择结构中必不可少的语句也被加入到了Swift中,只要有过编程经验的人对Switch语句都不会感到陌生,但苹果对Switch进行了大大的增强,使其拥有其他语言中没有的特性. // switch语句值绑定模式 let point = (100, 10) switch point { // 遇到有匹配的就不会在执行下一个了 这样子也可以啊case let (x, y) case (let x, let y): print("\(x): \(y)") //

  • 详解Swift的switch...case语句中break关键字的用法

    与Objective-C中这部分内容相比,在Swift中switch得到了极大的改善.这是一件非常有趣的事,因为这还是没有添加到Objective-C中,还是没有打破Objective-C是C的超集的事实. 第一件令人兴奋的地方是可以对字符串转换.这也许正是你之前想要做,却不能做的事.在Objective-C中如果要对字符串用"switch",你必须要使用多个if语句,同时要用isEqualToString:,像下面这样: if ([person.name isEqualToStrin

  • Java 如何在switch case语句中声明变量

    目录 在switch case语句中声明变量 第一种情况常见的场景为 第二种情况常见的场景为 Java switch-case语句用法及例题 原理归原理,下面是一个例题 在switch case语句中声明变量 Java中使用switch case语句时很容易出现以下两个报错: 1.Duplicate local veriable out. (局部变量重复) 2.The local veriable out may not have been initialized. (局部变量可能未被初始化)

  • 详解Java异常处理中throw与throws关键字的用法区别

    抛出异常 抛出异常有三种形式,一是throw,一个throws,还有一种系统自动抛异常.下面它们之间的异同. 系统自动抛异常 当程序语句出现一些逻辑错误.主义错误或类型转换错误时,系统会自动抛出异常.如: public static void main(String[] args) { int a = 5, b =0; System.out.println(5/b); //function(); } 系统会自动抛出ArithmeticException异常: Exception in threa

  • java中的switch case语句使用详解

    java中的switch case语句 switch-case语句格式如下: switch(变量){ case 变量值1: //; break; case 变量值2: //...; break; ... case default: //...; break; } swtich()变量类型只能是int.short.char.byte和enum类型(JDK 1.7 之后,类型也可以是String了).当进行case判断时,JVM会自动从上到小扫描,寻找匹配的case,可能存在以下情况: 情况一:若未

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

    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(&quo

  • 详解Swift中对C语言接口缓存的使用以及数组与字符串转为指针类型的方法

    详解Swift中对C语言接口缓存的使用以及数组与字符串转为指针类型的方法 由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与UnsafeMutablePointer类型,分别对应为const Type*类型与Type *类型. 而在Swift编程语言中,由于一般数组(Array)对象都无法直接用于C语言中含有指针类型的函数参数(比如:void*),所以往往需要

  • java中switch case语句需要加入break的原因解析

    java中switch case语句需要加入break的原因解析            java 中使用switch case语句需要加入break 做了具体的实例分析,及编译源码,在源码中分析应该如何使用,大家可以参考下: 假设我们有如下这样一个switch语句: public static void test(int index) { switch (index) { case 1: System.out.println(1); case 2: System.out.println(2);

  • 如何用c++表驱动替换if/else和switch/case语句

    目录 C++的表驱动法 一.常用示例 二.表驱动法 三.C++实现注意 四.实用案例 C++的表驱动法 目的:使用表驱动法,替换复杂的if/else和switch/case语句. 一.常用示例 以switch为例,常用示例如下: Funcition() { switch (key) { case key1: statements 1; break; case key2: statements 2; break; ... case keyn: statements n; break; defaul

  • 详解MySQL数据类型DECIMAL(N,M)中N和M分别表示的含义

    同事问MySQL数据类型DECIMAL(N,M)中N和M分别表示什么含义,M不用说,显然是小数点后的小数位数,但这个N究竟是小数点之前的最大位数,还是加上小数部分后的最大位数?这个还真记不清了.于是乎,创建测试表验证了一番,结果如下: 测试表,seller_cost字段定义为decimal(14,2) CREATE TABLE `test_decimal` ( `id` int(11) NOT NULL, `seller_cost` decimal(14,2) DEFAULT NULL ) EN

  • 使用 Python 实现简单的 switch/case 语句的方法

    在Python中是没有Switch / Case语句的,很多人认为这种语句不够优雅灵活,在Python中用字典来处理多条件匹配问题字典会更简单高效,对于有一定经验的Python玩家不得不承认,的确如此. 但今天我们还是来看看如果一定要用Python来Switch / Case,可以怎么玩. 语法约束 我们先定义一下Switch/Case应该怎么表达,为了简单我们可以让它长成这样. def cn(): print('cn') def us(): print('us') switch(lang).c

随机推荐