如何将符合协议的类声明为参数类型?

Abe*_*ant 6 class objective-c

有没有办法给出一个符合某个协议的类作为参数?

我一开始尝试的是带着一点希望,这是:

-(NSString *) getKeyForMyProtocolClass(Class<MyProtocol>)aClass
Run Code Online (Sandbox Code Playgroud)

但那导致了

[aClass superclass];
Run Code Online (Sandbox Code Playgroud)

给出警告"实例方法'超类'找到而不是类方法'超类'".我对conformsToProtocol得到了同样的警告:

因为当参数是(Class)aClass时它没有给出这样的警告,所以Class <MyProtocol>实际上并不是Class类型.

我不应该发送NSObject <MyProtocol>,因为我需要根据类及其超类确定正确的密钥,并且只有在没有设置该密钥的情况下才创建和添加新对象.

我可以用conformsToProtocol检查,但是我必须返回一个非常糟糕的nil值.我宁愿在编译时停止这个问题.

简而言之,是否有符合协议的类的类型声明?

eva*_*ent 1

您只需对类对象进行类型转换即可防止编译器发出警告。我能够执行以下操作:

- (void)tempMethod:(Class<NSObject>)klass {
   id a = [(Class)klass superclass];
    NSLog(@"%@", a);
}
Run Code Online (Sandbox Code Playgroud)

Class object由于您知道要传递的object( ) 的类型,因此应该可以正常工作。