スイフトでは、変数のタイプをtype(of:)
とMirror(reflecting:).subjectType
で指定できます。スタティックvsダイナミックタイプ
Documentationは約Mirror.subjectType
言う:
被写体の静的な型が反映されます。
このタイプは、自己がスーパークラスである場合、その被写体のダイナミックタイプと異なる場合があります。別のミラーのミラー。
私はtype(of:)
のためのドキュメントを見つけることができませんでしたがproposalはそれが.dynamicType
財産の交換だと言います。
私たちは動的型と静的型を持っています。どのような状況でどのような違いが現れますか?
P.S. 私は奇妙な問題を抱えているので私は尋ねています。このコード:デバッグ構成を使用してXcodeのからiPhone上で実行すると、出力できます
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)
:
B
B
B
B
とリリース構成を使用して実行している(Product -> Scheme -> Edit -> Build Configuration -> Release
の下で、それへの切り替え)が得られます。
A
B
B
B
これはSwiftコンパイラのバグである。
更新日私はJIRA ticketを開いた。
NSObjectサブクラス、純粋なSwiftクラス、および構造体を使ったいくつかのクイックテストでは、 'type(of:) 'と' Mirror(reflect :)。subjectType'から返される型の間に違いは見られませんでした。コンパイラのバグが発生したと思われる場合は、http://bugs.swift.orgでJIRAチケットを開くことをお勧めします。 – JAL
@ JAL完了。更新を参照してください。 – mixel