【发布时间】:2018-03-21 12:45:27
【问题描述】:
概述
我想通过匹配数组类型来使用 switch 语句。我有以下课程。
类:
class A {}
class B : A {}
开启单值工作:
let a : A = B()
switch a {
case let b as B:
print("b = \(b)")
default:
print("unknown type")
}
开启数组(编译错误):
let aArray : [A] = [B(), B()]
switch aArray {
case let bArray as [B] :
print("bArray = \(bArray)")
default:
print("unknown type")
}
错误:
Downcast pattern value of type '[B]' cannot be used
注意:在 Swift 4
上测试问题:
- 我怎样才能做到这一点?
【问题讨论】:
-
似乎是一个已知问题:bugs.swift.org/browse/SR-5671,也在这里观察到:stackoverflow.com/questions/24355513/…。
-
@MartinR 感谢您的更新,不确定条件一致性(Swift 4.1)是否会有所帮助,但似乎是一个开放的错误
-
@Hamish 是的,我什至可以改用
is,但后来我想在此过程中将其转换为[B]。目前我认为没有办法将其转换为[B] -
@Hamish 我的错,我没有正确阅读您的评论,它确实工作正常。我只是感到困惑。所以
as Any只是为了抑制编译错误? -
您能否通过提及解决方法和错误将其发布为答案,以便帮助其他面临相同问题的人。非常感谢