您的struct
示例代码中的声明如下:
typedef struct CGPointSPUserResizableViewAnchorPointPair {
CGPoint point;
SPUserResizableViewAnchorPoint anchorPoint;
} CGPointSPUserResizableViewAnchorPointPair;
这是您引用的代码行,重新格式化以更易于阅读:
CGPointSPUserResizableViewAnchorPointPair upperRight = {
CGPointMake(self.bounds.size.width, 0.0),
SPUserResizableViewUpperRightAnchorPoint
};
由于这一行创建了变量,它可以使用复合初始化器来初始化它。复合初始化器是一个用大括号括起来的列表,其中包含每个struct
成员的初始值,顺序为1。所以CGPointMake
调用的返回值初始化upperRight.point
,SPUserResizableViewUpperRightAnchorPoint
变量初始化upperRight.anchorPoint
。
重写代码中的赋值lowerMiddle
不是创建变量,您不能使用复合初始化程序。您需要以不同的方式设置结构成员。一种方法是依次分配给每个成员:
CGPointSPUserResizableViewAnchorPointPair lowerMiddle;
if (self.isScaled)
{
lowerMiddle.point = CGPointMake(self.bounds.size.width/2, self.bounds.size.height);
lowerMiddle.anchorPoint = SPUserResizableViewLowerMiddleAnchorPoint;
}
另一种方法是使用复合文字。复合文字就像变量定义中的复合初始值设定项,不同之处在于您必须将其“强制转换”为正确的类型:
CGPointSPUserResizableViewAnchorPointPair lowerMiddle;
if (self.isScaled)
{
lowerMiddle = (CGPointSPUserResizableViewAnchorPointPair){
CGPointMake(self.bounds.size.width/2, self.bounds.size.height),
SPUserResizableViewLowerMiddleAnchorPoint
};
}
脚注 1. 复合初始值设定项还有其他形式,但这是最简单的形式,也是您的示例使用的形式。