Bra*_*rie 3 protocols class objective-c
我正在尝试完成以下操作:
- (id<SomeProtocol>)instanceFromClass:(Class<SomeProtocol>)cls
{
return [[cls alloc] initUsingSomeConstructorDefinedInProtocolWithValue:_value];
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个No Known class method for selector 'alloc'错误。如何在我的签名中指定我想要接收符合协议的类?或者,如果该部分是正确的,我如何使用指定协议中定义的构造函数从该参数创建实例?
不知道为什么编译器会抱怨,但您可以通过将参数转换回 Class
- (id<SomeProtocol>)instanceFromClass:(Class<SomeProtocol>)cls
{
return [[(Class)cls alloc] initUsingSomeConstructorDefinedInProtocolWithValue:_value];
}
Run Code Online (Sandbox Code Playgroud)
同时仍然为您提供所需的参数类型检查,如此 SO 答案中所暗示的:声明一个符合协议的类的 ObjC 参数