在Objective C中使用动态类声明变量

时间:2013-12-18 09:54:07

标签: ios objective-c dynamic-cast

作为问题的逻辑继续: Objective-C dynamic_cast?

从那里我们了解到我们可以做到以下几点:

MyClass *safeObject = objc_dynamic_cast(originalObject, MyClass);

让我们假设层次结构:A - > B,A - > C,A - > d。

功能是

-(void)someStuffWith:(A*)object;

其中Object永远不是A,但总是B,C或D.

问题是如何在Objective-C中(特别是在iOS上)表示以下想法:

Class class = [object class];
class *safeObject = objc_dynamic_cast(object, class);

其中“class”是B,C或D.

2 个答案:

答案 0 :(得分:2)

这不是你应该这样做的方式。相反,你应该这样做:

- (void)someStuffWith:(id<MyProtocol>)object;

并且MyProtocol定义了object上必须存在的所有方法的列表,也可能是一些可选方法(您可以使用[object respondsToSelector:]检查)。

或许还有另一种解决方案,如果你告诉我们更多关于你的实际问题而不是你想如何解决它的问题,那将会有所帮助。 Objective-C已有30年的历史,您永远不会遇到语言没有完美解决方案的问题。不要试图发明新的解决方案并学习经过验证的解决方案。 : - )

答案 1 :(得分:0)

你使用的东西太复杂了。一切都很简单:

if ([object isKindOf:[B class]])
{
    B* bObject = (B*)object;
}