0

我几乎可以肯定这是不可能的,但我想知道是否有更了解 Objective-C 的人有不同的想法。我怀疑这会起作用的原因是,虽然可怕的运行时黑客可能有可能,但我怀疑编译器是否能够理解。

我想知道的是是否有可能有一个可以与另一个互换的协议:

 // let <ShortName> be a synonym for <NSReallyReallyLongName>
 id <ShortName> obj = [NSSomething objectConformingtoReallyReallyLongProtocolName];

本质上,我想概括我的 API 以获取符合的对象<NSReallyReallyLongName>,但我希望我和我的 API 的消费者都不必输入太多。一种可能的解决方案是typedef

typedef id <NSReallyReallyLongName> ShortName;

但这让 API 消费者不太清楚我正在建立一个基于协议的约束。有任何想法吗?

更新:

在下面的答案中看到非常简单的解决方案时,我觉得有点愚蠢。谢谢你逗我。

4

3 回答 3

4
#define ShortName LongName
于 2010-12-10T00:33:52.223 回答
1

还没有尝试过,但是如何让包含消息定义的短名称协议和长名称协议在没有新消息定义的情况下对其进行扩展。因为短名称是父名称,所以返回长名称实例的任何内容都应该没有问题,并且您的用户可以使用短名称。

但是从 KISS 的角度来看,等等。我真的建议你重新考虑并完全避免整个想法。它更容易混淆而不是帮助。

于 2010-12-10T00:44:54.603 回答
0

您也可以尝试@compatibility_alias,尽管这可能仅适用于课程。

于 2010-12-10T00:49:52.420 回答