我的静态库的工作包含具有以下属性的类继承:定义一个协议来实现类必须从一些超级类
@property (nonatomic) Class deserializationClass;
有没有办法来定义,这deserializationClass
必须被继承一些超级班说MySuperClass
。我打算告诉SDK的用户,您传递的类对象必须从库提供的超类继承。
我想知道协议是否可以在这里帮助。我们可以在协议中定义实现类必须从这个超类继承的方法吗?或者有没有其他解决方案来解决我的问题?
我的静态库的工作包含具有以下属性的类继承:定义一个协议来实现类必须从一些超级类
@property (nonatomic) Class deserializationClass;
有没有办法来定义,这deserializationClass
必须被继承一些超级班说MySuperClass
。我打算告诉SDK的用户,您传递的类对象必须从库提供的超类继承。
我想知道协议是否可以在这里帮助。我们可以在协议中定义实现类必须从这个超类继承的方法吗?或者有没有其他解决方案来解决我的问题?
Objective-C无法表达这一点。
请注意,UIView
具有相同的问题。它有layerClass
类方法,它必须返回Class
,其子类CALayer
,但它不能在编译时指定此方法。如果您覆盖layerClass
并且不返回CALayer
的子类,则会出现运行时错误。
您的替代方案是要求用户传入工厂对象而不是类。例如:
@protocol MyFactory
- (MySuperClass *)newInstance;
@end
@interface MyStaticLibraryObject
@property (nonatomic) NSObject<MyFactory> *deserializationFactory;
@end
现在,用户必须提供符合MyFactory
一个类的实例,你可以把它newInstance
得到的东西实现MySuperClass
。
啊,太糟糕了,在Objective-C中没有什么。一个伟大的活力,但一些坑洼也许。 –
为什么不简单定义属性如'@property(nonatomic)MySuperClass deserializationClass;'。然后'deserializationClass'必须是'MySuperClass'类型。 – Abhinav
大概他打算用类似'[[self.deserializationClass alloc] init]'的表达式来创建类的实例。这需要一个类对象。 –
@robmayoff你说得对。我打算这样做。 –