我想最初将 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;
最佳答案
CGPoint
是一个结构,因此您不能将它设置为 nil 或 NULL(它不是指针)。从某种意义上说,确实没有“未初始化”状态。也许您可以使用 {0.0, 0.0}
来指定未设置的 CGPoint
,但这也是一个有效的坐标。或者您可以使用负的 x
和 y
值来标记“未初始化”的点,因为负值不能作为有效的绘图点,但这有点麻烦,也是。
最好的选择可能是做以下两件事之一:
- 将属性存储为指向
CGPoint
的指针。未初始化时,此值可以设置为NULL
。当然,您必须担心malloc
ing 和free
ing 值。 将
CGPoint
与名为pointInitialized
或类似名称的BOOL
一起存储,初始设置为NO
,但在点初始化后设置为YES
。您甚至可以将其包装在一个结构中:struct { CGPoint point; BOOL initialized; } pointData;
关于objective-c - 如何检查 CGPoint 是否已初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928893/