Objective c 包含目标C中结构数组的结构
我有一个磁贴的结构(所有属性都是以前定义的枚举) 我想为一个“板”创建另一个包含16个瓷砖的结构。大概是这样的:Objective c 包含目标C中结构数组的结构,objective-c,struct,typedef,Objective C,Struct,Typedef,我有一个磁贴的结构(所有属性都是以前定义的枚举) 我想为一个“板”创建另一个包含16个瓷砖的结构。大概是这样的: typedef struct { TileDefinition[16] } BoardDefinition; 然后我希望能够循环,就像这样: for(int i=0;i<16;i++) { TileDefinition tileDef = boardDef[i]; // Do something with tileDef } for(int i=0
typedef struct {
TileDefinition[16]
} BoardDefinition;
然后我希望能够循环,就像这样:
for(int i=0;i<16;i++) {
TileDefinition tileDef = boardDef[i];
// Do something with tileDef
}
for(int i=0;i选项1:使BoardDefinition
成为一个Objective-C对象,可以在init
方法中进行设置
选项2:使用(目标-)C++并为struct BoardDefinition
提供构造函数
选项3:保留C并提供一个initBoardDefinition(BoardDefinition*boardDef);
函数。选项1:使BoardDefinition
成为一个Objective-C对象,可以在init
方法中进行设置
选项2:使用(目标-)C++并为struct BoardDefinition
提供构造函数
选项3:使用C并提供一个initBoardDefinition(BoardDefinition*boardDef);
函数。正如特洛伊木马程序所建议的,这些对象作为Objective-C对象会更好,但如果出于某种原因,您不愿意这样做。
例如,您可能希望在某个类中声明BoardDefinition类型的实例变量
@interface MyClass : NSObject
{
BoardDefinition definition;
}
而且你的定义是错误的,应该是这样的
typedef struct {
TileDefinition boardDef[16];
} BoardDefinition;
for(int i=0;i<16;i++) {
TileDefinition tileDef = definition.boardDef[i];
// Do something with tileDef
}
typedef struct {
TileDefinition * tileDefinition;
NSUInteger count;
} BoardDefinition;
然后,您的循环将类似于
typedef struct {
TileDefinition boardDef[16];
} BoardDefinition;
for(int i=0;i<16;i++) {
TileDefinition tileDef = definition.boardDef[i];
// Do something with tileDef
}
typedef struct {
TileDefinition * tileDefinition;
NSUInteger count;
} BoardDefinition;
通过这种方式,您可以拥有数量可变的TileDefinition
- (id)init
{
if( (self = [super init]) != nil )
{
definition.count = 16;
definition.tileDefinition = malloc( definition.count * sizeof(*definition.tileDefinition);
}
return self;
}
正如trojanfoe所建议的,这些作为Objective-C对象会更好,但如果出于某种原因,您不愿意这样做。
例如,您可能希望在某个类中声明BoardDefinition类型的实例变量
@interface MyClass : NSObject
{
BoardDefinition definition;
}
而且你的定义是错误的,应该是这样的
typedef struct {
TileDefinition boardDef[16];
} BoardDefinition;
for(int i=0;i<16;i++) {
TileDefinition tileDef = definition.boardDef[i];
// Do something with tileDef
}
typedef struct {
TileDefinition * tileDefinition;
NSUInteger count;
} BoardDefinition;
然后,您的循环将类似于
typedef struct {
TileDefinition boardDef[16];
} BoardDefinition;
for(int i=0;i<16;i++) {
TileDefinition tileDef = definition.boardDef[i];
// Do something with tileDef
}
typedef struct {
TileDefinition * tileDefinition;
NSUInteger count;
} BoardDefinition;
通过这种方式,您可以拥有数量可变的TileDefinition
- (id)init
{
if( (self = [super init]) != nil )
{
definition.count = 16;
definition.tileDefinition = malloc( definition.count * sizeof(*definition.tileDefinition);
}
return self;
}
这实际上是一个C问题
这个位子很好:
typedef struct {
ShapeType shape;
ColorType color;
PatternType pattern;
IconType icon;
} TileDefinition;
在这里,您需要将BoardDefinition
声明为:
enum { BoardDefinition_NTiles = 16 }; // << declare a constant for your ease of use
typedef struct {
TileDefinition tile[BoardDefinition_NTiles];
} BoardDefinition;
enum{BoardDefinition\NTiles=16};//这实际上是一个C问题
这个位子很好:
typedef struct {
ShapeType shape;
ColorType color;
PatternType pattern;
IconType icon;
} TileDefinition;
在这里,您需要将BoardDefinition
声明为:
enum { BoardDefinition_NTiles = 16 }; // << declare a constant for your ease of use
typedef struct {
TileDefinition tile[BoardDefinition_NTiles];
} BoardDefinition;
enum{BoardDefinition\u NTiles=16};//struct{TileDefinition[16]}
在我看来真的很奇怪。struct{TileDefinition tiles[16];}
然后使用BoardDefinition.tiles[i]
?struct{TileDefinition[16]
在我看来真的很奇怪。struct有什么问题吗{TileDefinition tiles[16];}
然后使用boardDef.tiles[i]
?“这些作为Objective-C对象会更好”--为什么?好吧,不要把这个问题当真--我只是想指出,鉴于OP中的信息/问题,将类型转换为ObjC没有明显的原因/好处。我将通过游戏中心将这些内容发送给其他玩家,并希望尽可能使它们保持轻量级“这些作为Objective-C对象会更好”--为什么?好吧,不要把这个问题当真--我只是想指出,鉴于OP中的信息/问题,将类型转换为ObjC没有明显的原因/好处。我将通过Game Center将它们发送给其他玩家,并希望它们尽可能轻量