是否可以散列 Swift 协议?
Is it possible to hash a Swift protocol?
我正在尝试在 Swift 中编写一个从 API 的(协议)映射到实现(类)的注册表。我希望能够向注册表提供 API 并接收回实现它的 class 的实例。在 Objective-C 中,这是相当微不足道的——只需在协议上调用 NSStringFromProtocol,然后将其用作包含实现它们的 classes 的字典的键。然而,在Swift中,我们没有这种内省的能力。当我尝试做同样的事情时,我被告知 MyAPI.protocol 没有成员 "mirrorType"。我的问题是,在 Swift 中,如何在不使用 @objc 协议的情况下,将协议本身映射到实现它的 class。谢谢!
现在不使用@objc 是不可能的。我在这种情况下找到的解决方案是使用协议名称(字符串)作为此实现的字典的键(在我的例子中,我总是每个协议只有一个实例)。
使用@objc 将迫使您的所有实现 return 将 AnyObject 与 objective-C 中的等价物 (id)(如果您的函数不 return 原生 objective-C类型)。
希望对您有所帮助。
我正在尝试在 Swift 中编写一个从 API 的(协议)映射到实现(类)的注册表。我希望能够向注册表提供 API 并接收回实现它的 class 的实例。在 Objective-C 中,这是相当微不足道的——只需在协议上调用 NSStringFromProtocol,然后将其用作包含实现它们的 classes 的字典的键。然而,在Swift中,我们没有这种内省的能力。当我尝试做同样的事情时,我被告知 MyAPI.protocol 没有成员 "mirrorType"。我的问题是,在 Swift 中,如何在不使用 @objc 协议的情况下,将协议本身映射到实现它的 class。谢谢!
现在不使用@objc 是不可能的。我在这种情况下找到的解决方案是使用协议名称(字符串)作为此实现的字典的键(在我的例子中,我总是每个协议只有一个实例)。
使用@objc 将迫使您的所有实现 return 将 AnyObject 与 objective-C 中的等价物 (id)(如果您的函数不 return 原生 objective-C类型)。
希望对您有所帮助。