【问题标题】:Why isn't that variable declared at the header file?为什么不在头文件中声明该变量?
【发布时间】:2012-03-09 20:16:19
【问题描述】:

根据斯坦福大学 Objective-C 课程 Fall 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?

还有,返回的情况,这意味着如果所有这些情况都正确,则返回YES,否则返回NO(如果情况为真,则返回1,如果为假,则返回0)。对吧?

【问题讨论】:

  • 您在退货时是正确的。如果所有的 '&&' 都替换为 '||'如果任何条件为真,它将返回真。 '&&' 确保只有在所有条件都为真时才返回真(在这种情况下,这意味着炸弹击中了船)。

标签: objective-c


【解决方案1】:

leftEdgerightEdge 不在接口中,因为它们是局部变量。它们在该功能中需要。

关于你的第二个问题,你是对的。正是如此。

只有当你需要让它们成为它所表示的对象的一部分时,你才将变量放在接口(类)上。示例:如果您的接口表示车辆,那么numberOfWheels 可能是接口(类)变量。当您只需要某个范围内的变量(一个函数)来进行临时计算时(例如您的示例中的 leftEdgerightEdge),那么您只需要一个局部变量。

【讨论】:

  • 您能否通过指定具体要在接口上写入哪些变量来更清楚地说明这一点?
  • @TheNavigator:用一些澄清更新了我的答案。希望能帮助到你。祝你好运!
  • 嘿嘿嘿,你从 Ryan 那里偷了刻度线:P 好的,非常感谢。这更清楚:)
【解决方案2】:

局部变量和成员变量是有区别的。成员变量对于类来说是“全局的”,并且可以从任何实例方法中引用,因为它们是接口的一部分。 leftEdgerightEdge 都是局部变量,在 getsHitByBomb: 方法中声明。一旦方法返回/退出,它们就会超出范围。

【讨论】:

  • 这样比较容易理解。谢谢瑞恩,你帮我解决了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多