假设我有一个函数可以对类执行某些操作:
- (void)doSomethingWithClass:(Class)class
{
[class doSomething];
}
但是当然,方法 + (void)doSomething
并不是为所有类定义的。假设它仅为 SomeClass
类的子类定义。如何“限制”提供给函数的 class
参数的类类型?我希望能够做这样的事情:
- (void)doSomethingWithClass:(/* type of [SomeClass class] */)class
{
[class doSomething];
}
这样我就不必求助于这样的东西:
- (void)doSomethingWithClass:(Class)class
{
if (![class isSubClassOfClass:[SomeClass class]])
{
// error
}
[class doSomething];
}
这在 Objective-C 中可行吗?做这样的事情是个好主意吗?
最佳答案
Class
实际上是一个包含有关类类型的元数据的 C 结构。结构没有继承。
您可以通过传入对象类型的实例而不是 Class
结构类型来限制方法。
- (void)doSomethingWithClass:(SomeClass *)sender
{
Class class = [sender class];
[class doSomething];
}
如果您的方法确实必须接受 Class
对象作为参数,那么 isKindOfClass:
或 isSubclassOfClass
就是正确的选择。
关于objective-c - 指定Class类的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25299723/