【问题标题】:Is it possible to pattern match with optionals in Swift?是否可以与 Swift 中的选项进行模式匹配?
【发布时间】:2014-06-06 10:40:36
【问题描述】:

我不太喜欢带有选项的if let 语法,我正在尝试看看是否可以让模式匹配工作。我在操场上尝试以下代码,但在 println 语句中没有看到任何输出。我做错了什么?

let one:Int? = 1

switch one {
case .Some(let numeral):
    println("Caught a \(numeral)")
default:
    println("Nothing to catch")
}

【问题讨论】:

    标签: swift


    【解决方案1】:

    有点断章取义,但是:Playground 不会在右栏中打印println() 语句。 你可以再次写入你想读取的变量:

    ...
    case .Some(let numeral):
        println("Caught a \(numeral)")
        numeral
    ...
    

    在这种情况下,您会看到{Some 2}

    或者您可以打开助手编辑器(查看 -> 助手编辑器 -> 显示助手编辑器)并阅读 Console output 以阅读评估的 println()

    在 Xcode 6 beta-5 之后编辑

    使用 Xcode 6 beta-5,你终于可以println(),你会在右栏中看到文字。

    【讨论】:

      【解决方案2】:

      是的,您可以使用 下划线 (_) 来匹配并忽略任何值。

      【讨论】:

      • _ 也会捕获 nil。
      【解决方案3】:

      使用 if case let,而不是 switch。

      if case let numeral? = one {
        print("Caught a \(numeral)")
      }
      

      if case .Some(let numeral) = one {
        print("Caught a \(numeral)")
      }
      

      需要 Swift 2.0

      【讨论】:

      • repl.swift:3:4: 错误:预期表达式、var 或 let in 'if' 条件
      • 你需要 Swift 2。
      • 感谢您的澄清。如果您不介意,我将在答案中澄清这一点并收回我的反对意见
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多