我想用开关来做这件事:
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")
}
答案 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 {
}
然而,在这种情况下,没有理由这样做。