使用struct与Objective-C方法

时间:2012-05-05 14:38:54

标签: objective-c data-structures objective-c++

我正在写一个简单的游戏,并认为使用结构会容易得多。但是,我不能声明需要结构的方法。

我如何使用struct作为Objective-C方法的参数并获取返回结构的对象?

//my structure in the .h file
struct Entity
{
  int entityX;
  int entityY;
  int entityLength;
  int entityWidth;
  int entityType;
  bool isDead;
};

//And the methods i'm trying to use
-(BOOL)detectCollisionBetweenEntity:Entity ent1 andEntity:Entity ent2;

-(struct Entity)createEntityWithX:int newEntityX andY:int newEntityY, withType:int newEntityType withWidth:int newEntityWidth andLength:int newEntityLength;

2 个答案:

答案 0 :(得分:3)

你可以完全按照你的预期使用结构,你的问题似乎与方法的语法有关:

struct Entity
{
  int entityX;
  int entityY;
  int entityLength;
  int entityWidth;
  int entityType;
  bool isDead;
};

//And the methods i'm trying to use
-(BOOL)detectCollisionBetweenEntity:(struct Entity) ent1 andEntity:(struct Entity) ent2;

-(struct Entity)createEntityWithX:(int) newEntityX andY:(int) newEntityY withType:(int) newEntityType withWidth:(int) newEntityWidth andLength:(int) newEntityLength;

方法中的类型必须是parens,你必须引用struct Entity而不是Entity,除非你是typedef(在Objective-C中,Objective-C ++可能允许你这样做)< / p>

答案 1 :(得分:2)

结构始终用作Objective-C中的参数。例如Apple的CGGeometry Reference

中的CGRect
struct CGRect {
  CGPoint origin;
  CGSize size; 
}; 
typedef struct CGRect CGRect;

你只需要为你的结构创建一个类型,它可以像Apple一样完成,或者可以像

一样完成。
typedef struct CGRect {
  CGPoint origin;
  CGSize size; 
} CGRect;

所以在你的情况下:

typedef struct
{
  int entityX;
  int entityY;
  int entityLength;
  int entityWidth;
  int entityType;
  bool isDead;
} Entity;

应该允许你定义

-(BOOL)detectCollisionBetweenEntity:(Entity) ent1 andEntity:(Entity) ent2;
-(Entity)createEntityWithX:int newEntityX andY:int newEntityY, withType:int newEntityType withWidth:int newEntityWidth andLength:int newEntityLength;