Почему эта переменная не объявлена ​​в заголовочном файле? - PullRequest
2 голосов
/ 10 марта 2012

Согласно курсу Objective-C Стэнфордского университета, осень 2010/2011, лекция 3:

typedef struct {
    float x;
    float y;
} Point;

@interface Bomb
@property Point position;
@end

@interface Ship : Vehicle {
    float width, height;
    Point center;
}

@property float width;
@property float height;
@property Point center;
- (BOOL)getsHitByBomb:(Bomb *)bomb;
@end

@implementation Ship

@synthesize width, height, center;

- (BOOL)getsHitByBomb:(Bomb *)bomb
{
    float leftEdge = self.center.x - self.width/2;
    float rightEdge = ...;

    return ((bomb.position.x >= leftEdge) &&
        (bomb.position.x <= rightEdge) &&
        (bomb.position.y >= topEdge) &&
        (bomb.position.y <= bottomEdge));

}

@end

Почему в интерфейсе нет функции float leftEdge и float rightEdge?

Кроме того, обратный случай, это означает, что если все эти случаи верны, он возвращает ДА, если нет, то НЕТ (или 1, если случаи истинны, 0, если ложь). Правильно?

Ответы [ 2 ]

4 голосов
/ 10 марта 2012

Существует разница между локальными переменными и переменными-членами.Переменные-члены являются «глобальными» для класса и на них можно ссылаться из любого метода экземпляра, поскольку они являются частью интерфейса.leftEdge и rightEdge являются локальными переменными и объявляются в методе getsHitByBomb:.Они выходят из области видимости, как только метод возвращается / выходит.

4 голосов
/ 10 марта 2012

leftEdge и rightEdge не находятся в интерфейсе, потому что они являются локальными переменными. Они только , необходимые для этой функции.

По второму вопросу вы правы. Это именно тот случай.

Вы помещаете переменные в интерфейс (класс) только тогда, когда вам нужно сделать их частью представляемого им объекта. Пример: если ваш интерфейс представляет транспортное средство, то, вероятно, numberOfWheels будет переменной интерфейса (класса). Когда вам нужна только переменная в определенной области (функция) для выполнения временных вычислений (например, leftEdge и rightEdge в вашем примере), тогда все, что вам нужно, это локальная переменная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...