Swift:Switch 语句失败行为

2024-04-24

目前我有这个:

let somePoint = (1, 0)

switch somePoint {
case (0,0):
    print("origin") // does not print
    fallthrough
case (_, 0):
    print("y-axis") // prints y-axis. this makes sense
    fallthrough
case(0, _):
    print("x-axis") // prints x-axis (because of fallthrough? this should not print)
    fallthrough
case(-2...2, -2...2):
    print("in 5x5 box about the origin") // this prints and makes sense
default:
    print("somewhere else") // does not print
}

我使用此 switch 语句的目标是打印每个案例(如果为真),而不是仅打印第一个匹配的案例。我想我可以用fallthrough声明来做到这一点。然而,这让我质疑它是如何运作的。为什么即使大小写不匹配,fallthrough 也会自动打印行中的下一个大小写?我怎样才能让这个 switch 语句按照我想要的方式工作?


Fallthrough落入下一个案例,而不是下一个匹配的案例。这个概念继承自Cswitch语句,其中每个case可能被认为是goto目的地标签,以及switch语句将执行到第一个匹配的语句。

在C中,switch语句仅指示执行位置starts块内。为了更加方便,您may使用break声明跳过其余部分switch身体,但没有什么强迫你;如果你不这样做,执行会正常继续,就像cases 不在那儿。例如:

switch (countdown)
{
    case 3: puts("3...");
    case 2: puts("2...");
    case 1: puts("1...");
    case 0: puts("0!");
}

With no break任何地方,如果countdown是 3,那么你就得到了整个事情(即使countdown显然是 3,而不是 2、1 或 0)。

当执行从一个案例转到另一个案例而不是退出时switch范围(例如,具有break声明),你会得到“fall through”(这就是 Swiftfallthrough关键字确实如此)。

这在 C 中是相关的,因为您可以在内部使用任意复杂的结构switch语句,如果需要的话可以重叠案例。这是一个合法的 C 程序:

switch (x)
{
    case 0:
        if (y == 3)
        {
    case 1:
            puts("hello");
        }
        else
        {
            puts("world");
        }

    case 2:
        puts("!");
}

然而,这种用法极其罕见,并且通常很难遵循(快点!如果出现以下情况,可以执行 else 分支吗?x == 1?)。我还没有测试过,但如果你能用 Swift 做类似的事情,我会感到非常惊讶。

一般来说,在 C 中,跌倒被认为是糟糕的风格,因为通常很难判断跌倒是自愿的还是由于缺失break陈述。 Swift 解决了这个问题fallthrough语句,这明确表明您希望执行继续到语句中的下一个情况switch声明而不是退出switch scope.

在您的情况下,您不能使用fallthrough来获得您想要的东西,因为fallthrough仅当您需要的执行序列是线性时才有用。您需要跳过无效的代码块,因此您需要使用if-else序列而不是switch陈述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift:Switch 语句失败行为 的相关文章

  • 如何在 Swift Playgrounds 中获得弹出对话框

    我想知道如何在 Swift 中弹出一个对话框游乐场 是的 必须在 Playgrounds 中 我尝试了以下代码 直接来自 AppleDevs 站点 然而 无论我如何尝试 self tag always抛出错误 谁能帮我这个 import U
  • let/var 如何解决可变性? [复制]

    这个问题在这里已经有答案了 我没有任何问题 我只是想对有关可变性的问题进行一些澄清 在 Objective C 中我们会使用例如NSMutableArray得到一个可变数组和NSArray得到一个不可变的 我对两者的内部运作了解不多 但据我
  • 如何在 Swift 中使用 CoreBluetooth 更新 BLE 设备的电池电量?

    func peripheral peripheral CBPeripheral didDiscoverCharacteristicsFor service CBService error Error for c in service cha
  • 针对 iOS 10.3 进行编译,但模块“SwiftUICharts”的最低部署目标为 iOS 13.0

    知道如何仅在 iOS 版本超过 iOS 13 时导入 SwiftUICharts 框架吗 我通过 文件 gt Swift 包 gt 添加包依赖项 添加了此框架 我的应用程序目标必须是 iOS 10 我将此框架导入到 swiftui 控制器中
  • 如何将CIFilter应用到UIView上?

    根据Apple docs 过滤属性CALayer不支持iOS 当我使用正在申请的应用程序之一时CIFilter to UIView即 Splice Funimate 和 Artisto 的视频编辑器 Videoshow FX 这意味着我们可
  • xcode 9.0.1 / swift 4,没有使用 Objective-C 选择器 'onClick:forEvent:' 声明的方法 [重复]

    这个问题在这里已经有答案了 I use swift 4为了构建我的 UI 我创建了一个UIButton并想为其添加一个目标 但编译器会抛出警告 No method declared with Objective C selector onC
  • iOS Swift 和 reloadRowsAtIndexPaths 编译错误

    我与 xCode Swift 陷入僵局并刷新 UITableView 的单行 这条线有效 self tableView reloadData 而这条线没有 self tableView reloadRowsAtIndexPaths curr
  • 领域:结果 和列表

    是否可以转换Results
  • 具有动态警报正文的快速本地通知

    所以我可以创建一个像这样的本地通知 var localNotification UILocalNotification localNotification fireDate NSDate timeIntervalSinceNow 7 loc
  • 为 Swift 对象/属性设置观察者

    我一直在寻找一种在连接到 Mac 的显示器数量发生变化时触发方法的方法 我知道我可以获得 NSScreen screens count 的值 但我需要找到一种方法来在该值发生变化时创建通知或其他内容 或者指示所连接的显示器数量发生变化的其他
  • 将自定义图像设置为 UIBarButtonItem 但它不显示任何图像

    我想将自定义图像设置为 UIBarButtonItem 但它只显示周围的矩形框并且不显示实际图像 func setupBrowserToolbar let browser UIToolbar frame CGRect x 0 y 20 wi
  • 对成员“buildBlock()”的引用不明确

    我一直在尝试使用 Swift UI 为 iOS 13 制作一个应用程序 但我不断收到这个奇怪的错误 对成员 buildBlock 的引用不明确 无论我做什么 错误都不会消失 我尝试一次对代码段进行注释 以查看哪一部分可能导致了问题 但唯一有
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • Swift 中的柯里函数

    我想创建一个返回柯里函数的函数 如下所示 func addTwoNumbers a Int b Int gt Int return a b addTwoNumbers 4 b 6 Result 10 var add4 addTwoNumbe
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • Swift Codable 将空 json 解码为 nil 或空对象

    这是我的代码 class LoginUserResponse Codable var result String var data LoginUserResponseData var mess String public class Log
  • 如何编写SSIS switch/case 表达式?

    这是一个 SQL Server Integration Services SSIS 表达式问题 我对此还很陌生 我想在派生列转换中编写一个 switch case 表达式 基本上 新列可以根据输入列的值有 5 个不同的可能值 我从谷歌得到的
  • NVActivityIndi​​catorView 仅适用于特定视图

    我正在使用这个库https github com ninjaprox NVActivityIndi catorView https github com ninjaprox NVActivityIndicatorView用于显示加载指示器
  • 为什么我的视图仍然以横向呈现?

    我的视图是由导航控制器控制的 因此我将导航控制器支持的方向设置为明确的纵向和纵向UpSideDown 这可以工作 但是如果调用视图时前一个视图处于横向状态 它将以横向方式呈现并保持横向状态 直到设备旋转 如何防止这种情况发生 这是我的代码
  • init 中的 Swift 通用约束

    我有通用的 我希望能够用特定的约束来初始化它 约束仅用于初始化 班里的其他人并不关心 这是一个简化的示例 struct Generic

随机推荐

  • .NET 4 中的 TaskCreationOptions.DenyChildAttach

    我在 NET 4 5 中看到Task Run 相当于 Task Factory StartNew someAction CancellationToken None TaskCreationOptions DenyChildAttach T
  • C 中的 UTF8 处理

    我对UTF8有基本的了解 码点的长度是可变的 所以一个 字符 可以是8位 16位 甚至更长 我想知道 C 语言中是否有一些示例代码 库等可以与 UTF8 字符串 如 C 中的标准库 执行类似的操作 告诉字符串的长度等 Thanks GNU
  • 分配内存空间的宏

    我需要让一个汇编程序员来计算帕斯卡三角形 https en wikipedia org wiki Pascal 27s triangle 这样帕斯卡三角形的每一行都与其他行分开存储在内存中 我想做一个 但我不知道如何使用宏在汇编中做到这一点
  • SwiftUI:为什么 ForEach($strings) (文本:Binding)无法构建?

    我有一个ForEach它需要一个 Binding 并使用 Xcode11 beta5 编译 但使用 beta6 则显示Type of expression is ambiguous without more context on the T
  • sed 替换文字 TAB

    我想更换TABs in stdout带分号 通过运行sed来自 ZSH shell 我知道通常可以 在其他 shell 中 使用 somecommand sed s t g 然而 这在 FreeBSD 下的 ZSH shell 中对我不起作
  • DynamicDataDisplay ChartPlotter 删除所有绘图

    在我的 WPF 应用程序中 我有一个 D3 ChartPlotter 可以在其中绘制 4 个折线图 这是 XAML 代码
  • Objective-C 类是否可以在 .h 中实现 swift 协议

    是否有可能Objective C类来实现Swift协议中的 h以便其他Swift类可以参考Objective C类由Swift协议类型 Let MySwiftProtocol be the Swift协议类型 现在假设我有这个 h对于我的班
  • Apache 错误:地址已在使用中:make_sock:无法绑定到地址 [::]:443

    Apache 启动时出错 Address already in use make sock could not bind to address 443 Executing start method lib svc method http a
  • Spring安全和特殊字符

    我需要通过 url 在用户名和 或密码中使用特殊字符使用 j spring security check 登录 http localhost 8080 appname j spring security check j username u
  • 在 R 中解析和评估字符串表达式的列?

    如何将 R 中的一列字符串表达式作为管道的一部分进行解析和求值 在下面的示例中 我生成了所需的列 evaluated 但我知道这不是正确的做法 我尝试采取 tidyverse 方法 但我只是很困惑 library tidyverse df
  • 如何在 Docker SQL Server 映像上运行安装脚本?

    我正在尝试在 Docker SQL Server 映像上运行安装脚本 为此 我从 mssql 映像创建了一个 Dockerfile FROM microsoft mssql server linux 2017 CU8 Create dire
  • 有没有好的 AS3 代码片段/示例的指针?

    我是 AS3 的新手 每天都在学习 我正在寻找好的 AS3 代码片段 示例 小项目 我可以将其用于学习目的和参考 不依赖于 Flash IDE 因为我使用 Flex SDK 和 Flash Develop 此外 我还专门寻找有关音频 视频流
  • jQuery/AJAX - 单击按钮时将内容加载到 div 中?

    有人可以在这里提供帮助吗 我想填充一个div 例如 div div 包含来自外部文件的内容 例如 includes about info html 当单击某个类别的按钮时 例如 p class classloader Click Here
  • 保存实体会导致重复插入到查找数据中

    我使用 EF 4 1 代码优先 来创建我的数据库和对象 Given public class Order public int Id get set public string Name get set public virtual Ord
  • 绕过 InAppBrowser Cordova 插件中的 SSL 错误

    我已在 Cordova 项目中添加了一个 InAppBrowser 插件来访问站点并获取令牌 但是虽然该站点在桌面浏览器中正常打开 但从移动浏览器打开时却出现错误 此外 默认的本机浏览器会在出现 SSL 错误时要求继续 但 Cordova
  • 微软动态 - Web API

    我正在尝试通过 Web API 在 Dynamics 365 实例中创建一个新的 事件 案例 在我的http请求中 我不知道哪个字段是必填的 我尝试仅添加标题 主题和客户 但返回 Http 400 错误 我正在使用 Postman 尝试我的
  • 为什么 console.dir('') 打印“无属性”?

    我的印象是字符串具有属性 例如match 为什么console dir 声称 没有属性 至少在 Google Chrome 中 这是因为 是一个字符串文字 而不是一个实例String 班级 由于属性如match宣布于String proto
  • 双击 Selenium 的 javascript 执行

    有一种方法可以通过执行 javascript 来单击元素 如下所示 JavascriptExecutor driver executeScript arguments 0 click element 我想通过执行 JavaScript 来双
  • 允许在 Google 计算引擎 (GCE) 中使用 WebSocket

    我正在使用计算引擎 GCE 通过 Socket IO Node js 运行我的套接字服务器 它仅适用于轮询 当我尝试使用网络客户端时 我收到以下错误代码 WebSocket connection to ws myapp socket app
  • Swift:Switch 语句失败行为

    目前我有这个 let somePoint 1 0 switch somePoint case 0 0 print origin does not print fallthrough case 0 print y axis prints y