我想用一个开关来做到这一点:
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 with
case let
也可用于 if 语句(或 while/for 语句):if case let classAObj as A = randomObject {
} else if case let classBObj as B = randomObject {
}
但是,在这种情况下,没有理由这样做。