我可以在案例模式中使用演员吗?

时间:2016-02-04 08:53:06

标签: swift

我在一个枚举类型上有一个switch case语句,在Swift中有相关的值:

enum Foo {
    case Something(let s: Any)
    // …
}

我想在模式匹配中使用强制转换,有点像这样:

let foo: Foo = // …
switch foo {
    case .Something(let a as? SpecificType):
        // …
}

换句话说,我希望案例模式只有在演员成功时才能成功。这可能吗?

2 个答案:

答案 0 :(得分:4)

您可以使用where子句:

enum Foo {
    case Something(s: Any)
}

let foo: Foo = Foo.Something(s: "test")
switch foo {
case .Something(let a) where a is String:
    print("Success")
default:
    print("Failed")
}

答案 1 :(得分:2)

您的示例基本上按原样运行:

enum Foo {
  case Something(s: Any)
}

let foo = Foo.Something(s: "Success")
switch foo {
case .Something(let a as String):
  print(a)
default:
  print("Fail")
}

如果你取代"成功"与...它将打印的数字1"失败"代替。这就是你想要的吗?