如何使用Swift协议调用NSStringFromProtocol?

如何使用Swift协议调用NSStringFromProtocol?,swift,swift2.1,Swift,Swift2.1,假设 protocol MyCoolProtocol { .... } 以下代码拒绝编译(从Swift 2.1开始): 因为MyCoolProtocol不是Protocol类型。(乍一看,这似乎真的很奇怪,但如果你挖掘得足够多,它[不幸地]是有道理的) 如何在字符串中获取Swift协议的名称?有两种方法: 我能找到的最常见的建议是将您的协议声明为@objc。当您无意从Objective-C代码中引用此协议时,这似乎很奇怪 您可以使用let protocolName=String(myco

假设

protocol MyCoolProtocol {
   ....
}
以下代码拒绝编译(从Swift 2.1开始):

因为
MyCoolProtocol
不是
Protocol
类型。(乍一看,这似乎真的很奇怪,但如果你挖掘得足够多,它[不幸地]是有道理的)

如何在
字符串中获取Swift
协议的名称?

有两种方法:

  • 我能找到的最常见的建议是将您的
    协议声明为
    @objc
    。当您无意从Objective-C代码中引用此
    协议时,这似乎很奇怪

  • 您可以使用
    let protocolName=String(mycolprotocol)
    。从当前版本的Swift开始,它提供了您所期望的内容(
    “MyCoolProtocol”
    ),并且仍然在编译时进行检查


  • 我就是这样做到的:

    let protocolString=String(\(MyProtocol.self)”)
    
    let protocolName = NSStringFromProtocol(MyCoolProtocol)