-4

如何从不同的类中调用此方法,因为我已经尝试过并且失败了,请参见代码

#import <Foundation/Foundation.h>

@interface Card : NSObject

@property (strong, nonatomic) NSString *contents;

@property (nonatomic, getter = isFaceUp)BOOL faceUp;
@property (nonatomic, getter = isUnplayable)BOOL unplayable;

-(int)match:(NSArray *)otherCards;

@end


M file
#import "Card.h"

@implementation Card
@synthesize contents;

-(int)match:(NSArray *)otherCards
{
    int score = 0;
    for (Card *card in otherCards) {
        [card.contents isEqualToString:self.contents];
        score =1;
    }
    return score;
}
@end

我试过了,但它不起作用

  Card *card = [[Card alloc]init];
  [card match:otherCards]

  code completion is giving me this

   [card match:(NSArray *)]

如果我用 otherCards 替换 (NSArray *) 它甚至不会把它捡起来我得到这个错误

使用未声明的标识符“otherCards”

4

2 回答 2

2

您必须有一个otherCards在范围内命名的变量,并且它必须具有类型NSArray(或其子类)。变量可以是

  • 局部变量
  • 全局变量
  • 方法参数
  • 实例变量

这很简单,实际上:-)

于 2013-06-14T21:03:28.890 回答
1

当您调用match:的实例时Card,该方法期望将 anNSArray *作为参数传入。通过 Option-Clicking确保对象otherCards是一个。如果你只想传一张卡,你还需要传一张。NSArray *otherCardsNSArray *

要匹配一张卡:

Card *otherCard1 = [[Card alloc] init];
[card match: @[otherCard1]];

匹配多张卡片:

Card *otherCard1 = [[Card alloc] init];
Card *otherCard2 = [[Card alloc] init];
Card *otherCard3 = [[Card alloc] init];
[card match: @[otherCard1, otherCard2, otherCard3]];

另外,我认为当您说score =1;. 对于找到匹配的每张卡,您不想要增加分数吗?也许:

score +=1;

因此,当对象数量增加时,分数可以自由NSArray * otherCards增加。

于 2013-06-14T21:03:17.350 回答