3
在Swift中,我們可以通過type(of:)
和Mirror(reflecting:).subjectType
確定變量的類型。靜態與動態類型
Documentation約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)
使用調試配置在Xcode iPhone上運行時,使輸出:
B
B
B
B
和(Product -> Scheme -> Edit -> Build Configuration -> Release
下切換到它),使用推出配置中運行,給出:
A
B
B
B
這是Swift編譯器中的一個bug。
UPDATE我開了JIRA ticket。
在一些使用NSObject子類,純Swift類和結構的快速測試中,我沒有看到從類型(of:)'和Mirror(反射:)。subjectType'返回的類型之間有任何差異。如果您認爲您遇到了編譯器錯誤,我建議您在http://bugs.swift.org上打開JIRA票證。 – JAL
@JAL完成。查看更新。 – mixel