protocol P1 {
func doP1()
}
protocol P2 {
func doP2()
}
class B {
}
class D : B, P1, P2 {
func doP2() {}
func doP1() {}
}
let s = D()
print(type(of:(D() as P1)))
print(type(of:(D() as B)))
print(type(of:[D(), D()] as [P1]))
所以,当我跑,我得到:用“as”快速上传,发生了什么?
D
D
Array<P1>
好了,我可是从C++的世界即将到来。我想第一行会给我一个P1类型,第二行会给我一个B类型,第三行会给我一个P1数组。所以我得到了P1的数组,但是与第一行似乎不一致,它指出它的确是D而不是P1。那么是什么给了?显然,我不明白Swift的这个角落。当你上传时,不应该忽视这种类型的信息吗?编译器是否太聪明,因为它真的知道类型?
好的,谢谢马特(和Ewan)。是的,第三种情况(数组)是什么让我失望,所以感谢编辑清除了。 – DavidN