2015-01-01 2 views
-2

Я изучал приведенный ниже примерный код образца. Мой вопрос заключается в том, что при создании метода, принимающего массив как параметр -(int) match: (NSArray *)otherCards; Имеет ли это значение, что объекты в этом массиве являются карточками, потому что он объявлен в Card.h? Я не понимаю, откуда берутся card в if ([card.contents isEqualToString:self.contents]). Большое спасибо за вашу помощь!Объявление массива объектов в объекте c

 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; 
} 
+0

Спасибо Аарону! Итак, после добавления цикла for, как и вы, код должен быть способен скомпилировать? Я имею в виду карточку 'Card * ', она определяет метод, который принимает объект NSArray of Card в качестве параметра? – stillAFanOfTheSimpsons

+0

Я использую Java. Я не уверен, нормально ли использовать переменную, скажем, массив 'otherCards' в этом случае, без указания того, что находится в массиве. – stillAFanOfTheSimpsons

+1

Массивы Objective-C не печатаются. Мой примерный код предполагает, что массив заполняется объектами «Card», но если там находятся другие объекты, «card.contents» вызовет сбой (если другой объект также не имеет свойства 'content'.) Вы можете использовать' отвечаетSoSelector: 'или' isKindOfClass: 'для проверки реализации метода или членства класса во время выполнения. (Примечательно, что набираются массивы Swift, в отличие от массивов Obj-C.) –

1

Нет, компилятор не проверяет содержание NSArray. Вы можете поместить любой объект внутрь, поэтому вы всегда должны проверять, что объекты имеют нужный тип.

И, как Аарон сказал, что код не будет компилироваться ...

Смежные вопросы