我正在研究以下目标c示例代码。我的问题是,在创建一个将数组作为参数-(int) match: (NSArray *)otherCards;
的方法时,它是否意味着该数组中的对象是卡片,因为它是在Card.h
中声明的?我不明白card
中的if ([card.contents isEqualToString:self.contents])
来自哪里。非常感谢您的帮助!
 Card.h
#import <Foundation/Foundation.h>
@interface Card : NSObject
@property (strong, nonatomic) NSString *contents;
@property (nonatomic, getter=isChosen) BOOL chosen;
@property (nonatomic, getter=isMatched) BOOL matched;
- (int)match:(NSArray *)otherCards;
@end
Card.m
interface Card()
@end
@implementation Card
- (int)match:(NSArray *)otherCards
{
int score = 0;
if ([card.contents isEqualToString:self.contents]) {
score = 1;
}
return score;
}
@end
答案 0 :(得分:3)
card
。它不会编译,除非它是一个全局常量或其他东西。此外,otherCards
中未使用match:
。
我怀疑这段代码应该是循环的,也许是这样的:
- (int)match:(NSArray *)otherCards
{
int score = 0;
for (Card *card in otherCards) {
if ([card.contents isEqualToString:self.contents]) {
score++;
}
}
return score;
}
答案 1 :(得分:1)
不,编译器不检查NSArray的内容。你可以把任何类型的对象放在里面,所以你应该总是检查对象是你想要的类型。
而且,就像Aaron说的那样,代码不能编译......