2011-12-01 62 views
0

我对Objective-C很新,所以这可能是非常基本的。目标C - 自定义返回类型错误?

无论如何,我想在我的类中指定一个自定义返回类型,并且我不断收到错误,该类或者需要星号*或者根本不被视为类型。我读过你需要在你的头文件中使用@class而不是#import,但这在这种情况下似乎没有帮助。我还有什么做错了?

这里是我的代码:

#import <Foundation/Foundation.h> 

@class Room; 

@interface LevelData : NSObject { 

@private 

    NSArray *data; 
    Room *currentRoom; 

} 

+(void)initialize; 
+(*Room)getCurrentRoom; 

@end 

感谢一大堆!

+0

值得注意的是,一般来说 - 那些遵循[Apple的编码风格](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#//apple_ref/doc/uid/20001282-BCIGIJJF) - 您将其命名为currentRoom而不是getCurrentRoom。但这只是惯例。只有setter方法有'set'前缀(即:'setCurrentRoom:')。你可能会争辩说,这是因为你只是阅读一个价值而不执行任何行动,因此不需要任何动词。但是如果你开始这个习惯,那么从长远来看,使用键值编码会更好。 :) – 2011-12-01 02:29:35

回答

1

改变一个行:

+(Room *)getCurrentRoom; 

,看看是否编译。 Room *表示您正在返回一个指向Room Objective-C对象的指针。

+0

谢谢!非常感激。 – maskedbacon

1
  1. 星号应该跟在类名后面,就像标准的C型 指针一样。
  2. 类的方法应该返回一个值, 通常是一个指向同一类的对象的指针,所以如果你使用 initialize你会希望它返回一个Room*
  3. 良好的编码习惯是覆盖-(Class *) init;,但只有在需要时才会覆盖 。这是因为当你使用一个对象(通常是 )时,你(或其他人使用你的代码)应该/将要做的第一件事是调用某种形式的[[Class alloc] init]。如果他们在调用initialize函数时调用 ,则会调用 NSObject-(NSObject *)init;方法,而您的实例 变量将不会被设置。
+0

感谢您的帮助。初始化是一个构造函数还是标准实践? – maskedbacon

+0

没关系,我刚刚通过Google得到了答案:) – maskedbacon

+0

+(void)initialize是特殊的,你不应该自己调用它。当你的类被加载并且可以用来初始化类的数据时(类似于Java类的静态变量),运行时会调用它。这是一个复杂的话题,但总的来说,任何你使用+(void)初始化的东西都可以用另一种方式做得更好(比如singleton或者dispatch_once或者其他)。如果你打电话+(无效)初始化你自己,你很可能做错了。 – ipmcc