Obj C初始化器声明

时间:2013-11-02 14:40:53

标签: objective-c

对Obj-C来说很新,并且对.h和.m文件的语法非常困惑。我要做的就是将一个数组传递给我的初始化器。我的.h文件中显示Expected a type并在我的.m文件上显示Conflicting parameter types in implementation of initWithColor': '__strong id' vs 'GLKVector4' (aka 'union _GLKVector4')

的警告

Square.h

#import <Foundation/Foundation.h>

@interface Square : NSObject

- (id) initWithColor : (GLKVector4) col;

@end

Square.m

#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

2 个答案:

答案 0 :(得分:1)

我会猜一猜。 。

您的代码看起来很好,我认为只需执行以下操作:

  • 确保链接到GLKit框架。
  • 将导入添加到头文件#import&lt; GLKit / GLKit.h&gt;

enter image description here

无关:

顺便说一下,通过现代的Objective-c惯例,它被认为是一种强调你的ivar名称的良好做法,如下所示:

@implementation Square {
    GLKVector4 _color;
}

在Xcode或AppCode中,您可以从Refactor菜单重命名符号(ivar,property等)。

答案 1 :(得分:0)

#import <GLKit/GLKit.h>移至Square.h,因为您在该文件中引用了GLKVector4