我想用一个开关来做到这一点:

 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")
}

最佳答案

你当然可以:

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 关键字之后。

并且只是为了完整起见:Pattern matching withcase let 也可用于 if 语句(或 while/for 语句):
if case let classAObj as A = randomObject {

} else if case let classBObj as B = randomObject {

}

但是,在这种情况下,没有理由这样做。

10-08 11:59