下划线符号是不是会忽略或检查 Swift 中 switch 语句中的无效性?

Posted

技术标签:

【中文标题】下划线符号是不是会忽略或检查 Swift 中 switch 语句中的无效性?【英文标题】:Does the underscore symbol ignore or check for nullity in a switch statement in Swift?下划线符号是否会忽略或检查 Swift 中 switch 语句中的无效性? 【发布时间】:2015-06-24 12:04:51 【问题描述】:

我在 Swift 中有这样的 switch 语句:

switch tuple 
    case (let someObject, let current, nil):
        return true

    // Other cases...

元组的类型是(SomeObject?, SomeObject, SomeObject?),我用英文说的是:匹配前两个元素not nil,而第三个(可选) 无。

Xcode 7 告诉我,由于我没有使用绑定 someObjectcurrent,我应该用下划线替换它。但是如果我用下划线替换了元组中的第一个元素,它是否也与第一个元素为 nil 的情况相匹配,因为_ 意味着编译器会忽略该值? 对于第一个元素为 nil 的情况,我有一个单独的案例。

作为记录,看起来我的代码仍然可以按预期工作,但我想确定一下,我在任何地方都找不到任何文档。

【问题讨论】:

【参考方案1】:

下划线匹配任何值(nil 或 non-nil),但这也是 您的模式的情况:

case (let someObject, let current, nil):

第一个 let someObject 匹配任何值(nil 或非 nil)。所以这实际上并没有按您的预期工作。

可选类型定义为枚举:

enum Optional<T> : ... 
    case None
    case Some(T)
    // ....

并且nilOptional.None 相同。 因此你可以使用

case (.Some, _, nil):
// Alternatively: 
case (.Some, _, .None):

匹配第一个元素不是nil和最后一个元素的情况 元素为零。 (SomeObject?, SomeObject, SomeObject?) 的中间元素不是可选的,所以不能为 nil。

Swift 2 / Xcode 7 起,x? 模式可以用作同义词 对于.Some(x),在你的情况下

case (_?, _, nil):

匹配第一个元素不是 nil 而最后一个元素是 nil 的情况。

【讨论】:

以上是关于下划线符号是不是会忽略或检查 Swift 中 switch 语句中的无效性?的主要内容,如果未能解决你的问题,请参考以下文章

检查单词是否为英语单词时忽略标点符号

Word中怎么设置忽略拼写和语法检查提醒

java常用基础知识回忆1

检查字典是不是包含 Swift 中的值

JavaScript - 如何检查是不是在数字输入字段中输入了字母字符或符号[重复]

为啥 SQL Server 在 equals 语句中忽略表情符号?