假设一些
protocol MyCoolProtocol {
....
}
以下代码拒绝编译(从 Swift 2.1 开始):
let protocolName = NSStringFromProtocol(MyCoolProtocol)
因为MyCoolProtocol
不是类型Protocol
。(乍一看,这似乎很奇怪,但如果你挖得够多,[不幸地]是有道理的)
如何在 a 中获取我的 Swift 的protocol
名称String
?
有两种方法:
我能找到的最常见的建议是将你的声明protocol
为@objc
. 当您无意protocol
从 Objective-C 代码中引用它时,这似乎很奇怪。
您可以使用let protocolName = String(MyCoolProtocol)
. 在当前版本的 Swift 中,这完全符合您的期望 ( "MyCoolProtocol"
),并且仍在编译时进行检查。
这就是我实现它的方式:
let protocolString = String("\(MyProtocol.self)")