有没有办法向编译器表明类对象符合协议(protocol)?
据我所知,通过创建 +(void)foo
类方法,该类对象的实例 会将这些方法作为实例方法。因此,只要我为所有必需的协议(protocol)方法创建 +(void)foo
方法,我就可以让一个类对象充当委托(delegate)。
我的问题当然是在类的头文件中,我只知道如何指示类的实例符合协议(protocol)(通常情况下就是这样)。所以,我想出的最好办法是像这样转换类对象:
something.delegate = (id<SomethingDelegate>)[self class]
有什么想法吗?
最佳答案
您现在所做的是正确的,因为它会消除警告,这是您的目标。您将发送协议(protocol)中为实例定义的类对象消息,这有点令人困惑,但运行时并不关心。
这样想:您想将委托(delegate)设置为响应协议(protocol)中定义的消息的对象。你的类就是这样做的,你的类也是一个对象。因此,您应该将您的类视为符合该协议(protocol)的对象。因此,您所写的内容是完全正确的(基于您正在尝试做的事情)。
不过,需要注意的一点是,此类不会正确响应 conformsToProtocol:
。无论如何,这对于委托(delegate)设置来说通常是可以的(委托(delegate)通常不检查类是否符合——它们只检查它是否可以响应选择器)。
作为旁注,您可以在句法上做的一件事是:
Class<SomethingDelegate> variable = (Class<SomethingDelegate>)[self class];
这里的区别在于编译器将使用协议(protocol)中的类方法而不是实例消息。不过,这不是您想要的。
关于objective-c - ObjC 类对象可以符合协议(protocol)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10068434/