Objective c Obj C初始值设定项声明

Objective c Obj C初始值设定项声明,objective-c,Objective C,对Obj-C非常陌生,对.h和.m文件的语法非常困惑。我要做的就是把一个数组传递给我的初始值设定项。我在.h文件中得到一个错误,它说需要一个类型,在我的.m文件中得到一个警告,它说在initWithColor'的实现中参数类型冲突:'\uu strong id'vs'GLKVector4'(也称为'union\u GLKVector4') Square.h #import <Foundation/Foundation.h> @interface Square : NSObject

对Obj-C非常陌生,对.h和.m文件的语法非常困惑。我要做的就是把一个数组传递给我的初始值设定项。我在.h文件中得到一个错误,它说
需要一个类型
,在我的.m文件中得到一个警告,它说
在initWithColor'的实现中参数类型冲突:'\uu strong id'vs'GLKVector4'(也称为'union\u GLKVector4')

Square.h

#import <Foundation/Foundation.h>

@interface Square : NSObject

- (id) initWithColor : (GLKVector4) col;

@end
#导入
@接口方块:NSObject
-(id)initWithColor:(GLKVector4)col;
@结束
平方米

#import "Square.h"
#import <GLKit/GLKit.h>

#define BG_WIDTH 500.0f
#define BG_HEIGHT 400.0f

typedef struct {
    GLKVector3 positionCoordinates;
    GLKVector2 textureCoordinates;
    GLKVector3 normalCoordinates;
} VertexData;

VertexData bgRect[] = {
    { { 0.0f,  0.0f,  0.0f}, {0.0f, 0.0f}, { 0.0f,  0.0f, 1.0f}, },   // 2D - forward facing only
    { { BG_WIDTH,  0.0f,  0.0f}, {0.0f, 0.0f}, { 0.0f,  0.0f, 1.0f} },
    { { 0.0f,  BG_HEIGHT,  0.0f}, {0.0f, 0.0f}, { 0.0f,  0.0f, 1.0f} },
    { { 0.0f,  BG_HEIGHT,  0.0f}, {0.0f, 0.0f}, { 0.0f,  0.0f, 1.0f} },
    { { BG_WIDTH,  0.0f,  0.0f}, {0.0f, 0.0f}, { 0.0f,  0.0f, 1.0f} },
    { { BG_WIDTH,  BG_HEIGHT,  0.0f}, {0.0f, 0.0f}, { 0.0f,  0.0f, 1.0f} },};

@implementation Square {
    GLKVector4 color;
}

- (id) initWithColor : (GLKVector4) col {
    self = [super init];
    if (self) {
        color = col;
    }

    return self;
}

@end
#导入“Square.h”
#进口
#定义BG_宽度500.0f
#定义BG_高度400.0f
类型定义结构{
GLKVector3位置坐标;
GLKVector2纹理坐标;
GLKVector3法线坐标;
}顶点数据;
VertexData bgRect[]={
{0.0f,0.0f,0.0f},{0.0f,0.0f},{0.0f,0.0f,1.0f},},//2D-仅前向
{{BG_宽度,0.0f,0.0f},{0.0f,0.0f},{0.0f,0.0f,1.0f},
{0.0f,BG_高度,0.0f},{0.0f,0.0f},{0.0f,0.0f,1.0f},
{0.0f,BG_高度,0.0f},{0.0f,0.0f},{0.0f,0.0f,1.0f},
{{BG_宽度,0.0f,0.0f},{0.0f,0.0f},{0.0f,0.0f,1.0f},
{{BG_宽度,BG_高度,0.0f},{0.0f,0.0f},{0.0f,0.0f,1.0f},};
@实施广场{
GLKVector4颜色;
}
-(id)initWithColor:(GLKVector4)列{
self=[super init];
如果(自我){
颜色=颜色;
}
回归自我;
}
@结束
我猜一猜

您的代码看起来不错,我认为这只是执行以下操作的问题:

  • 确保链接到GLKit框架
  • 将导入添加到头文件#导入

顺便说一句,根据现代objective-c惯例,在ivar名称下面加下划线是公认的良好做法,如下所示:

@implementation Square {
    GLKVector4 _color;
}
在Xcode或AppCode中,可以从重构菜单重命名符号(ivar、属性等)

我来猜一猜

您的代码看起来不错,我认为这只是执行以下操作的问题:

  • 确保链接到GLKit框架
  • 将导入添加到头文件#导入

顺便说一句,根据现代objective-c惯例,在ivar名称下面加下划线是公认的良好做法,如下所示:

@implementation Square {
    GLKVector4 _color;
}

在Xcode或AppCode中,可以从重构菜单重命名符号(ivar、属性等)

移动
#导入
到Square.h中,因为您在该文件中引用了
GLKVector4

移动
#导入
到Square.h中,因为您在该文件中引用了
GLKVector4

您阅读了第二点吗?上面写着“将导入添加到头文件#导入”你读了第二点了吗?上面写着“将导入添加到头文件#导入”