Естественно, это печать T
, это то, что вы просили с String(describing: T.self)
. T
- это всегда сам протокол.
Внутри расширения протокола Self
(заглавная 'S') - это способ обращения к соответствующему типу.
Таким образом, расширение должно быть:
extension T {
var typeName: String {
return String(describing: Self.self)
}
}
Кроме того, встроенная функция type(of:)
уже дает вам динамический тип любого объекта, поэтому неясно, что вам действительно нужно дублировать эту функцию самостоятельно.