スーパークラスで実装されているメソッドでオブジェクトの動的な型を判別する必要があります。スーパークラスはBaseClientと呼ばれ、DisplayClientはそれを継承します。スウィフト4:タイプ(of:self).description()はStringとは異なります(説明:type(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 :(:self))。私はこれがまさに私が何をしているのかと考えています(())。
文字列が内部的にどのように生成されるかについての詳細はどこにありますか?
docsは言う:
は、Stringインスタンスとしてその好ましい表現に任意の型のインスタンスを変換するには、この初期化子を使用してください。インスタンスはTextOutputStreamableプロトコルに準拠している場合、結果は(全S)instance.writeを呼び出すことによって得られる
- :上の初期化子は、プロトコル適合性に応じて、以下のいずれかの方法でインスタンスの文字列表現を作成します空の文字列s。
- インスタンスがCustomStringConvertibleプロトコルに準拠する場合、結果はinstance.descriptionになります。
- インスタンスがCustomDebugStringConvertibleプロトコルに準拠する場合、結果はinstance.debugDescriptionになります。
- 不特定の結果は、Swift標準ライブラリによって自動的に提供されます。
しかし、型(of:self)にはdescription属性もありません。これにはdescription()メソッドしかありません。これはコンパイラによって異なる方法で処理される特別なケースですか?
関連:私は文字列を使用しhttps://stackoverflow.com/questions/48306011/swift-4-typeof-self-differs-when-using-private-fileprivate –