我有一个数据类型为CGPoint的变量,名为endPosition。当endPosition在if语句中获取其值时,它将返回此疯狂值:结束位置:{1.6347776e-33,1.4012985e-45} 。
1。例如:
if ([touch view] != background)
{
CGPoint location = [touch locationInView:self.view];
CGPoint endPosition;
if([touch view] == circle){
CGPoint endPosition = {462.5, 98.5};
}
CGFloat xDist = (endPosition.x - location.x);
CGFloat yDist = (endPosition.y - location.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
NSLog(@"End Position: %@", NSStringFromCGPoint(endPosition));
}
当CGPoint endPosition不在if语句中时,我得到正确的值:结束位置:{462.5,98.5}
2。例如:
if ([touch view] != background)
{
CGPoint location = [touch locationInView:self.view];
CGPoint endPosition = {462.5, 98.5};
CGFloat xDist = (endPosition.x - location.x);
CGFloat yDist = (endPosition.y - location.y);
CGFloat distance = sqrt((xDist * xDist) + (yDist * yDist));
NSLog(@"End Position: %@", NSStringFromCGPoint(endPosition));
}
谁能告诉我该怎么做?我需要这个if语句:)提前感谢。
答案 0 :(得分:4)
在您的示例1中,您永远不会初始化endPosition
的值。那是因为在'if'语句(if([touch view] == circle){
)中你定义了一个名为endPosition
的新变量,它取代了该范围内的另一个变量。无论如何,您应该初始化endPosition
到CGPointZero
。
答案 1 :(得分:2)
这是因为在第一种情况下,如果endPoint
,您没有为[touch view] != circle
设置值。
在这种情况下,你的变量是未初始化的,你会得到一个恰好存在于内存中的随机值。您必须处理其他情况(else
)或在声明变量时将其初始化为某个值,例如CGPointZero
。
答案 2 :(得分:0)
CGPoint endPosition; //This is a declaration of a of new stack variable of name "endPosition"
if([touch view] == circle){
CGPoint endPosition = {462.5, 98.5}; //...AND this is a declaration of another variable
}
您想从第二行删除CGPoint。
此外,由于您的CGPoint从未初始化,因此它不一定具有非垃圾值。您可以添加一个else块并将endPosition = CGPointZero放在那里,或者您可以在第一行上执行此操作。
编辑:{462.5,98.5}是错误的大小(2个双打),{462.5f,98.5f}是2个浮点数,但你应该坚持使用CGPointMake并避免使用“复杂”的文字。
答案 3 :(得分:0)
解决方案:
CGPoint endPosition = CGPointZero;
if([touch view] == circle){
endPosition = CGPointMake(462.5, 98.5);
}