2014-01-24 30 views
0

我曾尝试谷歌这一点,但实际上没有发现任何东西。从强的Smalltalk背景的人,我想下面的就可以了:从一个方法返回一个关于Objective-C类的引用的语法?

#import "ValveTargetState.h" 

- (id) targetStateClass { 
    return ValveTargetState; 
} 

- (void) targetIsActive:(BOOL)isActive { 
    self.targetState = [[[self targetStateClass] alloc] initValve: self isActive: isActive]; 
    [self.targetState push]; 
} 

基本上,我添加了一个方法,让子类可以调整使用什么targetStateClass。这是我的理解,就像Smalltalk一样,类也是ObjC中的对象。但是Xcode中告诉我

Unexpected interface name 'ValveTargetState': expected expression 

(为return ValveTargetState;表达)

我想我失去了一些东西很明显,但它是什么?

+0

您没有返回实例... –

+0

不是类实例吗?您可以发送消息给他们... –

+1

targetStateClass的返回值应该是Class,而不是id。 – rmaddy

回答

1

假设ValveTargetState是从NSObject最终继承的类,无论是

[ValveTargetState class] 

[ValveTargetState self] 

会给你的指针类对象为ValveTargetState

直接使用ValveTargetState会好很多,但不幸的是,类名不是Objective-C中的有效表达式。

4

试试这个:

- (Class)targetStateClass 
{ 
    return [ValveTargetState class]; 
} 
+1

它不应该是'return [self class]'吗? – rmaddy

+0

@rmaddy诚实,我不明白主题创始人想要达到什么目的。我只是展示了返回类引用的语法。 –

+1

@rmaddy:不一定。 Almas的版本是OP代码的直接修正。 '[self class]'会为ValveTargetState的实例提供完全相同的结果,但对于子类来说会有不同的结果。这取决于他是否打算指定ValveTargetState,或者他是否想要自己的班级,无论这可能是什么。 – Chuck

相关问题