2016-12-01 1 views
3

스위프트에서 변수 유형은 type(of:)Mirror(reflecting:).subjectType으로 결정할 수 있습니다.정적 대 동적 유형

DocumentationMirror.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을 열었습니다.

+0

NSObject 하위 클래스, 순수 Swift 클래스 및 구조체를 사용한 빠른 테스트에서'type (of :) '및'Mirror (reflect :). subjectType'에서 반환 된 형식간에 차이점을 보지 못했습니다. 컴파일러 버그가 발생했다고 생각 되시면 http://bugs.swift.org에서 JIRA 티켓을 여는 것이 좋습니다. – JAL

+0

@JAL 완료. 업데이트를 참조하십시오. – mixel

답변

1

issue은 곧 마스터가되고 fixed이되어야하고 곧 다음 버전 (3.0.2 이후) 스위프트 버전이되어야합니다.

덕분에 Joe Groff.