定义实现类的协议必须从某些超类继承

时间:2015-11-04 04:49:22

标签: objective-c

我正在开发一个静态库,其中包含一个具有以下属性的类:

@property (nonatomic) Class deserializationClass;

有没有办法定义这个deserializationClass必须从某些超类说MySuperClass继承。我打算告诉SDK的用户你传递的类对象必须继承自库提供的超类。

我想知道协议是否可以帮到这里。有没有一种方法可以在协议中定义实现类必须从这个超类继承?或者我的问题有其他解决方案吗?

1 个答案:

答案 0 :(得分:1)

Objective-C无法表达这一点。

请注意,UIView存在同样的问题。它具有layerClass类方法,该方法必须返回Class子类CALayer,但它不能在编译时指定它。相反,如果覆盖layerClass并且不返回CALayer的子类,则会出现运行时错误。

您的替代方法是要求用户传入工厂对象而不是类。例如:

@protocol MyFactory

- (MySuperClass *)newInstance;

@end

@interface MyStaticLibraryObject

@property (nonatomic) NSObject<MyFactory> *deserializationFactory;

@end

现在,用户必须提供符合MyFactory的类的实例,并且您可以发送它newInstance以获取实现MySuperClass的内容。