class P {}
class C: P {}
let i: P = C()
let iDT = i.dynamicType
let CS = C.self
iDT == CS
iDT === CS
iDT.dynamicType == CS.dynamicType
iDT.dynamicType
CS.dynamicType
问题是:为什么
iDT.dynamicType
P.Type.Type
?我希望它是
C.Type.Type
。 最佳答案
这将更简单:
class A {}
class B:A {}
let i: A = B()
i.dynamicType
i.dynamicType.dynamicType
因此我们可以推断
i.dynamicType
是i
真正的类型(多态性),而i.dynamicType.dynamicType
是i
类型的类型。注意,它不是;它是一个.type,一个元类型。dynamicType.dynamicType
的概念是一种边缘情况,所以这大概是一个实现细节。在repl中做这些很有趣:
1> class A {}
2> class B:A {}
3> let i : A = B()
i: B = {
__lldb_expr_1.A = {}
}
4> i.dynamicType
$R0: A.Type = __lldb_expr_3.B
5> i.dynamicType.dynamicType
$R1: A.Type.Type = metatype for __lldb_expr_1.A
关于swift - Swift dynamicType返回什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38113888/