免费开源的iOS开发学习平台

结构struct:2-结构的嵌套

在Objective-C的语法中,结构的定义可以十分的灵活。例如,可以定义一个结构,本身还包含其他的结构作为自己的一个或者多个成员,另外也可以定义包含数组的结构。

嵌套结构的定义

在学习UIView类时,我们可以了解到任何一个控件在设备上的布局,都是由其frame属性所决定的,而frame属性则是一个CGRect类型的结构体,其中还包含了两个结构成员,分别为原点坐标以及长宽,类型为CGSizeCGPoint

  • CGRect结构的构成如下。由另外两个结构体CGSizeCGPoint组成。
struct CGRect {
    CGPoint origin;
    CGSize size;
};
typedef struct CGRect CGRect;
  • CGPoint结构的构成
struct CGPoint {
    CGFloat x;
    CGFloat y;
};
typedef struct CGPoint CGPoint;
  • CGSize结构的构成
struct CGSize {
    CGFloat width;
    CGFloat height;
};
typedef struct CGSize CGSize;

嵌套结构的初始化

  • 通用初始化方法。当需要定义嵌套结构变量时,可以先分别定义其中的结构体成员,如下所示:
    //普通初始化方法
    CGPoint point = {0,0};
    CGSize size = {100,100};
    CGRect frame = {point, size};
  • 快速初始化方法。在系统提供的框架中,有时会提供一些函数,来供开发者快速创建结构体成员变量。
    //快速初始化
    CGPoint point1 = CGPointMake(0, 0);
    CGSize size1 = CGSizeMake(100, 100);
    CGRect frame1 = {point1, size1};
    //快速初始化
    CGRect frame2 = CGRectMake(0, 0, 100, 100);

嵌套结构成员变量的访问

可以通过多级点语法来访问结构体中嵌套结构体的成员变量。

void structTest () {
    //普通初始化方法
    CGPoint point = {0,0};
    CGSize size = {100,100};
    CGRect frame = {point, size};
    //快速初始化
    CGPoint point1 = CGPointMake(0, 0);
    CGSize size1 = CGSizeMake(100, 100);
    CGRect frame1 = {point1, size1};
    //快速初始化
    CGRect frame2 = CGRectMake(0, 0, 100, 100);
    
    //访问
    frame.size.width = 200;
    frame1.size.width = 200;
    frame2.size.width = 200;
    NSLog(@"%f--%f--%f",frame.size.width,frame1.size.width,frame2.size.width);
}

示例代码

https://github.com/99ios/6.5.2