我正在开发一个静态库,其中包含一个具有以下属性的类:
@property (nonatomic) Class deserializationClass;
有没有办法定义这个deserializationClass
必须从某些超类说MySuperClass
继承。我打算告诉SDK的用户你传递的类对象必须继承自库提供的超类。
我想知道协议是否可以帮到这里。有没有一种方法可以在协议中定义实现类必须从这个超类继承?或者我的问题有其他解决方案吗?
答案 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
的内容。