我想知道是否可以从该协议(protocol)中找到符合给定协议(protocol)的类型的名称。我正在考虑协议(protocol)扩展以避免在符合该协议(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
始终是协议(protocol)本身。
在协议(protocol)扩展 Self
(大写的“S”)内是您引用符合类型的方式。
所以扩展应该是:
extension T {
var typeName: String {
return String(describing: Self.self)
}
}
此外,内置的 type(of:)
函数已经为您提供了任何对象的动态类型,因此不清楚您是否真的需要自己复制此功能。
关于swift - 我可以从该协议(protocol)中获取符合该协议(protocol)的类型的名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54151271/