스위프트에서 변수 유형은 type(of:)
및 Mirror(reflecting:).subjectType
으로 결정할 수 있습니다.정적 대 동적 유형
Documentation 약 Mirror.subjectType
말한다 :
가 피사체의 정적 유형이 반영된다.
자기가 수퍼 클래스 인 경우이 유형은 피사체의 동적 유형과 다를 수 있습니다. 다른 미러의 거울.
나는 type(of:)
에 대한 문서를 찾을 수 없습니다하지만 proposal는 교체 .dynamicType
속성에 있다고 말한다.
그래서 동적 유형과 정적 유형이 있습니다. 그들과 어떤 상황에서 어떤 차이가 있습니까?
P. 이상한 문제가있어서 부탁드립니다. 이 코드 :
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