我可以从该协议中获取符合该协议的类型的名称吗?
Can I get the name of a type conforming to a protocol from that protocol?
我想知道是否可以从该协议中找到符合给定协议的类型的名称。我正在考虑协议扩展以避免在符合该协议的每种类型中重复。我试过这个:
protocol T {
var type: String { get }
}
extension T {
var type: String {
return String(describing: T.self)
}
}
struct S: T {}
let s = S()
print(s.type)
但这显示的是 T
而不是 S
。
有什么办法可以做到这一点吗?
自然是打印 T
,这就是你用 String(describing: T.self)
要求的。 T
始终是协议本身。
在协议扩展 Self
中(大写 'S')是您引用符合类型的方式。
所以扩展名应该是:
extension T {
var typeName: String {
return String(describing: Self.self)
}
}
另外,内置的 type(of:)
函数已经为您提供了任何对象的动态类型,因此不清楚您是否真的需要自己复制此功能。
我想知道是否可以从该协议中找到符合给定协议的类型的名称。我正在考虑协议扩展以避免在符合该协议的每种类型中重复。我试过这个:
protocol T {
var type: String { get }
}
extension T {
var type: String {
return String(describing: T.self)
}
}
struct S: T {}
let s = S()
print(s.type)
但这显示的是 T
而不是 S
。
有什么办法可以做到这一点吗?
自然是打印 T
,这就是你用 String(describing: T.self)
要求的。 T
始终是协议本身。
在协议扩展 Self
中(大写 'S')是您引用符合类型的方式。
所以扩展名应该是:
extension T {
var typeName: String {
return String(describing: Self.self)
}
}
另外,内置的 type(of:)
函数已经为您提供了任何对象的动态类型,因此不清楚您是否真的需要自己复制此功能。