Objective c 为什么不是';是否在头文件中声明了该变量?
根据斯坦福大学2010/2011秋季目标C课程,第3课:Objective c 为什么不是';是否在头文件中声明了该变量?,objective-c,Objective C,根据斯坦福大学2010/2011秋季目标C课程,第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;
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
typedef结构{
浮动x;
浮动y;
}点;
@接口炸弹
@属性点位置;
@结束
@接口船:车辆{
浮动宽度、高度;
点中心;
}
@属性浮动宽度;
@属性浮动高度;
@物业点中心;
-(BOOL)getsHitByBomb:(炸弹*)炸弹;
@结束
@执行船
@综合宽度、高度、中心;
-(BOOL)getsHitByBomb:(炸弹*)炸弹
{
浮动左边缘=self.center.x-self.width/2;
浮动右边缘=。。。;
返回((bomb.position.x>=leftEdge)&&
(bomb.position.x=上边缘)&&
(bomb.position.yleftEdge
和rightEdge
不在界面中,因为它们是局部变量。它们仅在该函数中需要
关于你的第二个问题,你是对的。事实确实如此
仅当需要将变量作为接口(类)所表示对象的一部分时,才在接口(类)上放置变量。例如:如果您的接口表示车辆,则numberOfWheels
可能是接口(类)变量。当您只需要某个范围内的变量(函数)进行临时计算时(如您的示例中的leftEdge
和rightEdge
),那么您只需要一个局部变量。局部变量和成员变量之间存在差异。成员变量是“全局的”可以从任何实例方法引用,因为它们是接口的一部分。leftEdge
和rightEdge
都是局部变量,都在getsHitByBomb:
方法中声明。一旦方法返回/退出,它们就超出范围。可以通过指定哪些变量确实是在界面上写的?@TheNavigator:更新了我的答案,并做了一些澄清。希望能有所帮助。祝你好运!嘿嘿,你偷了Ryan的记号:P好的,非常感谢。这更清楚了:)你在返回的情况下是正确的。如果所有的“&&”都被“| |”替换,那么如果其中任何一个条件为真,它将返回真。“&&”确保只有在所有条件都为真时它才会返回真(在本例中,这意味着炸弹击中了船)。这更容易理解。谢谢你Ryan,你为我解决了它:)