【发布时间】:2012-05-11 19:53:14
【问题描述】:
是否存在与 C++ 的 dynamic_cast 等效的 Objective-C?
可以用这个来伪造:
MyClass *safeObject = [object isKindOfClass: [MyClass class]]
? (MyClass *)originalObject : nil;
但要输入的代码很多,即使我不需要经常输入。
我有点生疏,所以这可能不太正确,但我相信 C++ 中的等价物是:
MyClass safeObject = dynamic_cast<MyClass>(orginalObject);
这里的上下文是一个块,其中参数被定义为更通用的类的类型,但在这个块中我“知道”它是一个特定的子类。尽管如此,我不想只是盲目地使用(MyClass *)originalObject 进行投射,而忽略理论上可能出现的错误。
需要明确的是,虽然我喜欢 dynamic_cast,但我也很乐意采用另一种方法来安全处理此案。
【问题讨论】:
-
在最坏的情况下,您可以为此编写一个宏。
-
Objective-C 是鸭式的。老实说,“复杂”的演员阵容有点反对这种语言。
-
是的,我想我可能在这里问错了问题。无论我应该问什么问题,答案都是“只需使用
NSAssert([object isKindOfClass: [MyClass class]], @"blahblah"),因为无论如何你都不会期待它”。 :)
标签: objective-c