Swift 2 - "if"中的模式匹配

Qby*_*yte 32 syntax if-statement pattern-matching swift swift2

最近我看到了Apple的2015年WWDC主题演讲.我也查看了一些文档,但是我找不到"if if pattern"部分,它是如何写在他们展示的幻灯片上的.(来自Apple Events的 68分00秒视频)

你知道这是指什么吗?还是语法?

Mic*_*lum 63

它真正意味着if语句现在支持模式匹配,就像已有的switch语句一样.例如,以下现在是使用if/else if/else语句来"切换"枚举的有效方法.

enum TestEnum {
    case One
    case Two
    case Three
}

let state = TestEnum.Three

if case .One = state {
    print("1")
} else if case .Two = state {
    print("2")
} else {
    print("3")
}
Run Code Online (Sandbox Code Playgroud)

以下是检查是否someInteger在给定范围内的可接受方式.

let someInteger = 42
if case 0...100 = someInteger {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

以下是使用Swift编程语言中的可选模式的更多示例

let someOptional: Int? = 42
// Match using an enumeration case pattern
if case .Some(let x) = someOptional {
    print(x)
}

// Match using an optional pattern
if case let x? = someOptional {
    print(x)
}
Run Code Online (Sandbox Code Playgroud)

  • @MartinR是的,它们可以让你想知道为什么可选模式可能有用而不是使用`if let x = someOptional`可选绑定语法.实际上,当在这里使用简单的`if`语句时,它不是很有用,但是对于`for`或`while`循环更有用(比如`for case let x?in arrayOfOptionalInts`,它只在非nil值上循环对于更复杂的`if`语句,例如`if case let(x?,y?)in someFuncThatReturnsATupleOfOptionals()`,只有当元组中的两个元素都是非nil然后绑定x和y时才会为true同时. (7认同)
  • 最后两个陈述是 - 如果我理解正确 - 相当于众所周知的`if let x = someOptional {}`. (4认同)
  • 然而,这是我见过的更糟糕的语法.永远.单等于测试的标志?那里也有一个案例陈述?为什么这不是`in`运算符? (3认同)