请考虑以下示例:
swift - Swift dynamicType返回什么?-LMLPHP

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.dynamicTypeP.Type.Type
我希望它是C.Type.Type

最佳答案

这将更简单:

class A {}
class B:A {}
let i: A = B()
i.dynamicType
i.dynamicType.dynamicType

因此我们可以推断i.dynamicTypei真正的类型(多态性),而i.dynamicType.dynamicTypei类型的类型。注意,它不是;它是一个.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/

10-11 23:18