Dou*_*oug 19 syntax protocols class objective-c
有没有办法向编译器指示类对象是否符合协议?
据我所知,通过创建+(void)foo类方法,该类对象的实例将这些方法作为实例方法.因此,只要我+(void)foo为所有必需的协议方法创建方法,我就可以让一个类对象充当委托.
我的问题当然是在类的头文件中,我只知道如何指示类的实例符合协议(通常是这种情况).所以,我发现最好的是像这样抛出类对象:
something.delegate = (id<SomethingDelegate>)[self class]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
相关但不同: ObjC:有没有"类协议"这样的东西?
wby*_*ung 19
你现在正在做的是正确的,因为它会使你的目标沉默警告.您将发送协议中定义的类对象消息,这些实例有点令人困惑,但运行时并不关心.
以这种方式考虑:您希望将委托设置为响应协议中定义的消息的对象.你的班级做了这个,你的班级也是一个对象.因此,您应该将您的类视为符合该协议的对象.因此,你所写的内容是完全正确的(基于你想要做的事情).
但有一点需要注意的是,这个课程不能正确回应conformsToProtocol:.这通常适用于委托设置(委托通常不检查类是否符合 - 他们只是检查它是否可以响应选择器).
作为旁注,你可以在语法上做的一件事是:
Class<SomethingDelegate> variable = (Class<SomethingDelegate>)[self class];
Run Code Online (Sandbox Code Playgroud)
这里的区别在于编译器将使用协议中的类方法而不是实例消息.不过,这不是你想要的.
没有Objective-C语法来指示元类符合协议.
我认为你可以在运行时通过使用class_addProtocol元类来完成它.但我没试过.
我想你也可以+conformsToProtocol:在课堂上写一个方法,并说谎你的一致性.这可能有意想不到的副作用,因为已经是一个+conformsToProtocol:上NSObject(除了-conformsToProtocol:).
这些都不会消除转换器关闭编译器的需要.只需使用单身人士.
| 归档时间: |
|
| 查看次数: |
6968 次 |
| 最近记录: |