根据斯坦福大学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
为什么浮动leftEdge并浮动右边界面?
此外,返回案例,这意味着如果所有这些案例都是正确的则返回YES,否则返回NO(如果情况为真则为1,如果为假则为0)。正确?
答案 0 :(得分:4)
leftEdge
和rightEdge
不在界面中,因为它们是局部变量。它们在该功能中仅 。
关于你的第二个问题,你是对的。情况确实如此。
当您需要将变量放在由它表示的对象的一部分时,您只将变量放在接口(类)上。示例:如果您的界面代表车辆,那么numberOfWheels
可能是一个接口(类)变量。当您只需要某个范围(函数)中的变量进行临时计算时(例如示例中的leftEdge
和rightEdge
),那么您只需要一个局部变量。
答案 1 :(得分:4)
局部变量和成员变量之间存在差异。成员变量是类的“全局”,可以从任何实例方法引用,因为它们是接口的一部分。 leftEdge
和rightEdge
都是局部变量,并在getsHitByBomb:
方法中声明。一旦方法返回/退出,它们就会超出范围。