如果您尝试混合使用类和协议(protocol),那么在 Objective-C 中意味着什么?如果类不符合协议(protocol),我试图让编译器在编译器时警告我。例如:
@protocol FLLiveDataProtocol <NSObject>
...
@end
- (id)initWithDataPath:(NSString *)path usingDataClassFactory:(Class<FLLiveDataProtocol>)dataFactoryClass;
但是,当我尝试这个时,我遇到了各种有趣的问题。首先,如果您传入一个不符合协议(protocol)的类,它不会触发编译器错误,其次,如果您尝试执行 [[dataFactoryClass] alloc] init] 甚至通过协议(protocol)符合NSObject。
我还没有看到很多人试图混合协议(protocol)和 Class 关键字的例子(我应该说 Typedef ——谢谢 Nikolai)。
我知道我可以使用conformsToProtocol 在运行时检查,但如果我能在编译时检查它会很好。
最佳答案
在 Objective-C ( see this question ) 中没有类对象的静态类型信息,因此无法表达类符合协议(protocol)的需要。
旁注:Class
不是关键字,而是 objc.h 中的 typedef:
typedef struct objc_class *Class;
关于Objective-C 类关键字和协议(protocol),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18579949/