在Swift中,我们可以通过type(of:)
和Mirror(reflecting:).subjectType
确定变量的类型。
Mirror.subjectType
的
反映主体的静态类型。
当self是另一个镜像的超类镜像时,此类型可能与主题的动态类型不同。
我找不到type(of:)
的文档,但proposal表示它已取代.dynamicType
属性。
所以我们有动态和静态类型。它们之间有什么区别,它在什么情况下会出现?
P.S。 我问,因为我有一个奇怪的问题。这段代码:
protocol A: class {
}
class B: A {
}
let b = B()
class C<T> {
func test(value: T) {
print("\(type(of: value))")
print("\(Mirror(reflecting: value).subjectType)")
}
}
func test(a: A) {
print("\(type(of: a))")
print("\(Mirror(reflecting: a).subjectType)")
}
C<A>().test(value: b)
test(a: b)
使用Debug配置从Xcode在iPhone上运行时输出:
B
B
B
B
并使用Release配置运行(在Product -> Scheme -> Edit -> Build Configuration -> Release
下切换到它)给出:
A
B
B
B
哪个接缝是Swift编译器中的错误。
更新我打开了JIRA ticket。