考虑下面的例子:
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
是type i
被键入为。请注意,它不是 A;它是 A.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/