swift - 我可以从该协议(protocol)中获取符合该协议(protocol)的类型的名称吗?

标签 swift swift-protocols

我想知道是否可以从该协议(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/

相关文章:

Swift 4.3 - 在 2 个文件之间传递数据的协议(protocol)

swift - 创建从多个协议(protocol)继承的协议(protocol)类型的对象时出错

ios - Swift- EXC_CRASH (SIGABRT) 如何使用此堆栈跟踪查找异常

swift - 如何为仅适用于 Swift 4.1 中的可选泛型参数的泛型结构创建扩展?

ios - 无法将类型 '(_) -> ()' 的值转换为预期的参数类型 '((Bool, Error?) -> Void)?'

swift - 实现另一个协议(protocol)的协议(protocol)变量

swift - 如何快速检查符合协议(protocol)的实例类?

swift - 以快速的方式在快速单元测试中模拟静态类方法?

swift - 如何在 Swift 中访问 ScrollView 中的各个 View

swift - 根据文本内容调整textview的大小(swift)