【问题标题】:Objective C casting Class structure pointer to a concrete classObjective C将类结构指针转换为具体类
【发布时间】:2014-02-17 00:35:05
【问题描述】:

在 Objective C 中,有一个 Class 结构,它充当指向您拥有的任何类实现的指针。在 Objective C 中,它被定义为:

typedef struct objc_class *Class;

我正在尝试拥有一个类数组,并且我正在尝试遍历该类数组并执行静态函数。下面是一些示例代码:

//Each class is subclassed from the same abstract class with a function specialStaticFunction
NSArray *array = [[NSArray alloc] initWithObjects:Class1, Class2, Class3];

for(Class tempClass in array)
    [tempClass specialStaticFunction];
}

运行该代码时,我收到警告,因为并非每个类都有一个名为 specialStaticFunction 的函数。所以我想知道如何强制转换一个 Class 或者其他人如何规避这个警告。

【问题讨论】:

  • 我认为这实际上不是您遇到的错误。它可以发送并非每个班级都响应的消息。实际错误是什么?
  • “我收到警告,因为不是每个类都有一个名为 specialStaticFunction 的函数”不。编译器不检查发送到类型 Class 的消息。
  • 另外,您的代码是错误的,因为initWithObjects: 的参数必须以nil 结尾。

标签: ios objective-c class casting static-methods


【解决方案1】:

在这里使用id 而不是Class

for(id tempClass in array)

这应该会从编译器中删除警告,但您仍需要确保每个对象都实现该方法,否则您的应用将崩溃。

【讨论】:

  • 使用isKindOfClass进行进一步检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2016-05-05
相关资源
最近更新 更多