方法问题中的多个参数

时间:2014-06-14 07:38:49

标签: objective-c methods cocos2d-iphone multiparameter

我第一次尝试使用多个参数创建方法。仍然试图围绕Objective C如何做事。现在已经敲了几天我的头。最后准备寻求帮助。在堆栈溢出搜索并尝试了许多帖子。下面是我正在使用的各种代码块...这是一个cocos2d v3项目,仅供参考。

// MainPlayScene.h
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#include <sys/sysctl.h>

@interface MainPlayScene : CCScene <CCPhysicsCollisionDelegate>
 + (MainPlayScene *)scene;
 - (id)init;
 - (void)evaluateTileAttack:(CCNode*)tileTouchedCCNode : (CCNode*)tileTouchedCCNode2;
@end


// MainPlayScene.m
#import "cocos2d.h"
#import "MainPlayScene.h"

@implementation MainPlayScene
{
 CCNode *tileTouchedCCNode;
 CCNode *tileTouchedCCNode2;
}

+ (instancetype)scene
{
 return [[self alloc] init];
}

- (id)init
{
 return self;
}

- (void)evaluateTileAttack: (CCNode*)ccnode1 : (CCNode*)ccnode2
{
 NSLog(@"ccnode1: %@", ccnode1.physicsBody.collisionType);
 NSLog(@"ccnode2: %@", ccnode2.physicsBody.collisionType);
}

- (void)actionMenuAttackHandler: (id)sender
{
 [self evaluateTileAttack: tileTouchedCCNode, tileTouchedCCNode2];
  ^^^^^^^^^^^^^^^^^^^^^
  error at this line
}

@end

错误:没有可见的@interface用于&#39; MainPlayScene&#39;声明选择器&#39; evaluateTileAttack:&#39;

我不知道为什么会收到此错误,因为我认为我正确地在MainPlayScene.h中声明...

1 个答案:

答案 0 :(得分:3)

虽然技术上有效,但我认为方法声明对于ObjC来说至少是不寻常的。当你在冒号上包装和对齐(按照长方法调用/声明的惯例)时最好看:

- (void)evaluateTileAttack:(CCNode*)tileTouchedCCNode 
                          :(CCNode*)tileTouchedCCNode2;

通常,方法的所有参数都有名称:

- (void)evaluateTileAttack:(CCNode*)tileTouchedCCNode 
                 otherNode:(CCNode*)tileTouchedCCNode2;

调用肯定无效,ObjC方法不采用以逗号分隔的参数列表(除非特别声明这样做,这很少见)。所以这是非法的:

[self evaluateTileAttack: tileTouchedCCNode, tileTouchedCCNode2];

相反它应该是(不确定这个未命名的格式):

[self evaluateTileAttack:tileTouchedCCNode 
                        :tileTouchedCCNode2];

这绝对有效,是预期/推荐的方法:

[self evaluateTileAttack:tileTouchedCCNode 
               otherNode:tileTouchedCCNode2];