gpt4 book ai didi

objective-c - ObjC 类对象可以符合协议(protocol)吗?

转载 作者:太空狗 更新时间:2023-10-30 03:14:22 27 4
gpt4 key购买 nike

有没有办法向编译器表明类对象符合协议(protocol)?

据我所知,通过创建 +(void)foo 类方法,该类对象的实例 会将这些方法作为实例方法。因此,只要我为所有必需的协议(protocol)方法创建 +(void)foo 方法,我就可以让一个类对象充当委托(delegate)。

我的问题当然是在类的头文件中,我只知道如何指示类的实例符合协议(protocol)(通常情况下就是这样)。所以,我想出的最好办法是像这样转换类对象:

something.delegate = (id<SomethingDelegate>)[self class]

有什么想法吗?

相关但不同的: ObjC: is there such a thing as a "class protocol"?

最佳答案

您现在所做的是正确的,因为它会消除警告,这是您的目标。您将发送协议(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com