详解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”。太神奇了!
相关文章
Compose声明式代码语法对比React Flutter SwiftUI
这篇文章主要为大家介绍了Compose声明式代码语法对比React Flutter SwiftUI来解释为什么说 Compose 的声明式代码最简洁,有需要的朋友可以借鉴参考下2022-08-08Swift实现Selection Sort选择排序算法的实例讲解
选择排序是一种稳定的排序算法,且实现代码通常比冒泡排序要来的简单,这里我们就来看一下Swift实现Selection Sort选择排序的实例讲解2016-07-07Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍
这篇文章主要介绍了Swift中实现点击、双击、捏、旋转、拖动、划动、长按手势的类和方法介绍,本文分别给出了各种手势的实现代码,需要的朋友可以参考下2015-01-01Swift使用SnapKit模仿Kingfisher第三方扩展优化
这篇文章主要为大家介绍了Swift SnapKit模仿Kingfisher第三方扩展优化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-09-09Swift 中的 Actors 使用及如何防止数据竞争问题(示例详解)
Swift中的Actors旨在完全解决数据竞争问题,但重要的是要明白,很可能还是会遇到数据竞争,本文将介绍Actors是如何工作的,以及你如何在你的项目中使用它们,感兴趣的朋友跟随小编一起看看吧2023-06-06
最新评论