수퍼 클래스에서 구현되는 메서드에서 내 개체의 동적 형식을 결정해야합니다. 수퍼 클래스는 BaseClient이며 DisplayClient는이 클래스로부터 상속받습니다.스위프트 4 : 형식 (of : self) .description()은 String과 다릅니다 (설명 : 형식 (of : self))
패키지 이름이 아니라 클래스 이름 만 있으면됩니다.
print("1", String(describing: type(of: self))) // DisplayClient
print("2", type(of: self)) // DisplayClient
print("3", type(of: self).description()) // package.DisplayClient
print("4", "\(type(of: self))") // DisplayClient
왜
type(of: self).description()
반환 package.DisplayClient 다른 사람은 클래스 이름을 반환 않지만 : 이것은 내가 뭘하려? String을 사용할 때 내부적으로 무엇이 호출되는지 궁금합니다. (type : of : self)). 나는 이것이 내가하는 일을 정확하게 수행한다고 가정 할 것이다.
문자열이 내부적으로 생성되는 방법에 대한 자세한 정보는 어디에서 찾을 수 있습니까?
는 docs 말 :
사용이 초기화가 문자열 인스턴스로 선호 표현으로 모든 유형의 인스턴스를 변환 할 수 있습니다. 인스턴스가 TextOutputStreamable 프로토콜을 준수하는 경우, 결과가 (에 : S) instance.write를 호출하여 얻을 수있다
- :의 초기화는 프로토콜의 적합성에 따라 다음 중 한 가지 방법으로 인스턴스의 캐릭터 라인 표현을 생성 빈 문자열 s.
- 인스턴스가 CustomStringConvertible 프로토콜을 준수하면 결과는 instance.description입니다.
- 인스턴스가 CustomDebugStringConvertible 프로토콜을 준수하면 결과는 instance.debugDescription입니다.
- 지정되지 않은 결과는 Swift 표준 라이브러리에 의해 자동으로 제공됩니다.
그러나 유형 (of : self)에는 설명 속성도 없습니다. 그것은 단지 description() 메소드를 가지고있다. 이것은 컴파일러에 의해 다르게 처리되는 특별한 경우입니까? 클래스가 NSObject
에서 상속하는 경우
관련 : https://stackoverflow.com/questions/48306011/swift-4-typeof-self-differs-when-using-private-fileprivate –