是否可以散列Swift协议?

时间:2015-07-08 06:45:45

标签: ios iphone swift protocols

我正在尝试在Swift中编写一个注册表,该注册表从API(协议)映射到实现(类)。我希望能够为注册表提供API并接收实现它的类的实例。在Objective-C中,这非常简单 - 只需在协议上调用NSStringFromProtocol,然后将其用作包含实现它们的类的字典的键。然而,在Swift中,我们没有这种内省的能力。当我尝试做同样的事情时,我被告知MyAPI.protocol没有成员" mirrorType"。我的问题是,在Swift中,如果不使用@objc协议,我可以从协议本身映射到实现它的类。谢谢!

1 个答案:

答案 0 :(得分:1)

到现在为止,不使用@objc是不可能的。我在这种情况下找到的解决方案是使用协议名称(字符串)作为此实现的字典的键(在我的情况下,每个协议只有一个实例)。

使用@objc将强制您让所有实现在Objective-C中返回AnyObject等效(id)(如果您的函数不返回本机Objective-C类型)。

希望有所帮助。