我想最初将 CGPoint 属性设置为特定点(屏幕中间)。随后其他方法可能希望更改此属性。我的想法是如果 getter 中为空则初始化它,但我收到消息 invalid argument type 'struct CGPoint' to unary expression 。我也尝试使用 if property == nil or 0 但没有喜悦。
有什么想法吗?
-(CGPoint)graphOrigin
{
// initialise to centre of screen if has not been set
if(!_graphOrigin) // this expression is causing the problem
{
CGPoint origin = CGPointMake(self.bounds.origin.x + self.bounds.size.width / 2, self.bounds.origin.y + self.bounds.size.height / 2);
_graphOrigin = origin;
}
return _graphOrigin;
}
A CGPoint
是一个结构体,因此不能将其设置为 nil 或 NULL(它不是指针)。从某种意义上说,确实不存在“未初始化”状态。也许你可以使用{0.0, 0.0}
指定一个未设置的CGPoint
,但这也是一个有效的坐标。或者你可以使用负数x
and y
值来标记“未初始化”点,因为负值不能是有效的绘图点,但这也有点麻烦。
也许你最好的选择是做以下两件事之一:
- 将属性存储为指向
CGPoint
。该值可以设置为NULL
未初始化时。当然,你还得担心malloc
ing and free
计算值。
-
存储CGPoint
旁边一个BOOL
called pointInitialized
或类似的东西,最初设置为NO
,但设置为YES
一旦该点被初始化。您甚至可以将其包装在一个结构中:
struct {
CGPoint point;
BOOL initialized;
} pointData;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)