切换带铸件的箱子

时间:2016-10-04 06:39:41

标签: ios swift

我想用开关来做这件事:

 protocol TestProtocol {}

 class A: TestProtocol {}
 class B: TestProtocol {}

 var randomObject: TestProtocol

 if let classAObj = randomObject as? A {
 } else if let classBObj = randomObject as? B {}

我想要这样的事情:

switch randomObject {
    case let classAObj = randomObject as? A:
         ...
    case let classBObj = randomObject as? B:
         ....
     default:
         fatalError("not implemented")
}

1 个答案:

答案 0 :(得分:3)

当然可以:

switch randomObject {
case let classAObj as A:
    // Here `classAObj` has type `A`.
    // ...
case let classBObj as B:
    // Here `classBObj` has type `B`.
    // ...
default:
    fatalError("not implemented")
}

在模式匹配表达式中,它是as,而不是as?, 并且不需要= randomObject,给出要匹配的值 在switch关键字后面。

只是为了完整性:模式匹配 case let 也可用于if语句(或while / for-statements):

if case let classAObj as A = randomObject {

} else if case let classBObj as B = randomObject {

}

然而,在这种情况下,没有理由这样做。