objective-c - 指定Class类的子类

标签 objective-c class subclass

假设我有一个函数可以对类执行某些操作:

- (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/

相关文章:

c++ - 尝试在不使用 vector 的情况下在 C++ 中创建同一类的许多对象

java - GWT 默认请求传输 : when/why to extend?

objective-c - 自定义全屏 NSWindow 中奇怪的大小调整?

objective-c - 如何在下载时播放 QuickTime 电影?

ios - 存储 UIImage 的文件名或对象以在 Obj-C 中进行处理

css - 我可以仅使用 CSS 添加类吗?

c# - 使用 AttributeTargets.Class 对自定义 ValidationAttribute 进行客户端验证

objective-c - 子类化时访问属性

iOS 7 - 使用 MKOverlayRenderer 在 MapKit 上绘制一组坐标

objective-c - 向 Core Text 添加断字?