2015-11-04 43 views
0

我的静态库的工作包含具有以下属性的类继承:定义一个协议来实现类必须从一些超级类

@property (nonatomic) Class deserializationClass; 

有没有办法来定义,这deserializationClass必须被继承一些超级班说MySuperClass。我打算告诉SDK的用户,您传递的类对象必须从库提供的超类继承。

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

+0

为什么不简单定义属性如'@property(nonatomic)MySuperClass deserializationClass;'。然后'deserializationClass'必须是'MySuperClass'类型。 – Abhinav

+2

大概他打算用类似'[[self.deserializationClass alloc] init]'的表达式来创建类的实例。这需要一个类对象。 –

+0

@robmayoff你说得对。我打算这样做。 –

回答

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

+0

啊,太糟糕了,在Objective-C中没有什么。一个伟大的活力,但一些坑洼也许。 –

相关问题