struct Date {
int year;
int month;
int day;
};
//按照结构赋值
struct Date date = {2015,06,19};
NSLog(@"%d",date.year);
//不按照结构赋值
struct Date date02 = {.year=2015,.month=06,.day=19};
NSLog(@"%d",date02.year);
输入结果:
2015-06-19 10:52:04.044 test[94301:6269499] 2015
2015-06-19 10:52:04.045 test[94301:6269499] 2015
在oc中常使用的结构体
NSRange
NSPoint\CGPoint
NSSize \ CGSize
NSRect \ CGrect
首先先说说NSRange 按住 Commond键点击进去后 看看它的声明
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
可以看出NSRange由字段location length组成,两个字段的类型都是NSUInteger 从字面理解一个是表示位置 一个是表示长度
用法举例:
NSString *str01 = @"My name is greenboy";
NSRange range = NSMakeRange(0, 4);
NSString *str02 = [str01 substringWithRange:range];
NSLog(@"从零开始的三个字符是=%@", str02);
输出结果是:
2015-06-18 22:52:48.197 study01[1158:53923] 从零开始的三个字符是=My n
案例二:求一个字符串(greenboy)在str01里面的位置和长度
NSString *str01 = @"My name is greenboy";
NSRange rang02 = [str01 rangeOfString:@"greenboy"];
NSLog(@"loc = %lu, len = %lu",rang02.location,rang02.length);
输出结果:
2015-06-18 23:02:36.158 study01[1205:60632] loc = 11, len = 8
NSPoint\CGPoint
NSPoint结构体:通过一个点坐标来标识元素位置
官方定义:
// 定义CGFLOAT_TYPE 为double类型
# define CGFLOAT_TYPE double
// 为CGFLOAT_TYPE创建一个新的名字 CGFloat
typedef CGFLOAT_TYPE CGFloat;
// 定义CGPoint结构体
struct CGPoint {
CGFloat x;
CGFloat y;
};
// 定义CGPoint结构体为CGPoint类型(其实这里是将struct CGPoint 的别名定义为 CGPoint)
typedef struct CGPoint CGPoint;
// 设置结构体CGPoint = NSPoint
typedef CGPoint NSPoint;<br><br>总结:可以看出CGPoint = NSPoint 本质都是结构体,里面包含了两个double类型来描述一个点
// 同一个点的两种表现方式
CGPoint point = NSMakePoint(20, 20); // 不常用
NSPoint point2 = CGPointMake(20, 20); // 常用 // CGPointZero ==
CGPointMake(0,0);
NSSize\CGSize结构体:描述元素的尺寸(宽和高),定义和NSPoint类似不再赘述,一般用法为:
CGSize size = NSMakeSize(20, 40);
NSSize size2 = CGSizeMake(40, 20); // 常用
CGRect结构体:用于描述元素的位置(CGPoint)和尺寸(CGSize),因此可以说CGRect是描述了一个在手机屏幕上的矩形
官方定义的CGRect:
struct CGRect {
CGPoint origin; // 描述元素位置坐标
CGSize size; // 描述元素尺寸
};
typedef struct CGRect CGRect;
// 描述一个坐标位置为(20,20)宽高分别为50和100的元素
CGRect rect = CGRectMake(20, 20, 50, 100); // 常用
NSRect rect2 = NSMakeRect(20, 20, 50, 100);
CGRectZero == CGRectMake(0,0,0,0);
CGSizeZero == CGSizeMake(0,0);
CGPointZero == CGPointMake(0,0);
// 第一种写法:坐标为(20,20)宽高分别为50和100
CGRect rect = {{20,50},{50,100}};
// 第二种写法:坐标为(20,20)宽高分别为50和100
NSPoint point = CGPointMake(20, 20);
NSSize size = CGSizeMake(50, 100);
CGRect rect2 = {point,size};
// 第三种写法:坐标为(0,0)宽高分别为50和100
CGRect rect3 = {CGPointZero,CGSizeMake(50, 100)};
如何快速查看结构体中的值
第一种方式:从结构体中将值依次取出来
NSRect rect = CGRectMake(20, 20, 50, 100);<br>
NSLog(@"x = %f, y = %f, width = %f, height = %f",rect.origin.x, rect.origin.y
, rect.size.width, rect.size.height);
// 这里的. 不是get方法只是单纯的从结构体中获取值而已
第二种方式:将结构体直接转换为字符串后打印
NSRect rect = CGRectMake(20, 20, 50, 100);
// 先将结构体转换称为字符串
NSString *strRect = NSStringFromRect(rect);// 直接打印转换后的字符串
NSLog(@"%@",strRect);<br><br> // NSSize/NSPoint这两种结构体NSStirng也提供了类似的方法
6.结构体比较常用的函数
结构体常用函数是在CoreGraphics.framework框架下面,因此需要先添加框架
较常用的方法
// 1.判断两个点的位置是否相等
BOOL pointIsEqual = CGPointEqualToPoint(CGPointMake(50, 100), CGPointMake(100, 50));
NSLog(@"%d",pointIsEqual);
// 2.判断尺寸大小是否相等
BOOL sizeIsEqual = CGSizeEqualToSize(CGSizeMake(50, 100), CGSizeMake(50, 100));
NSLog(@"%d",sizeIsEqual);
// 第一种写法:坐标为(20,20)宽高分别为50和100
CGRect rect1 = {{20,50},{50,100}};
// 第二种写法:坐标为(20,20)宽高分别为50和100
NSPoint point = CGPointMake(20, 20);
NSSize size = CGSizeMake(50, 100);
CGRect rect2 = {point,size};
// 3.判断两个矩形是否相等
BOOL rectIsEqual = CGRectEqualToRect(rect1, rect2);
NSLog(@"%d",rectIsEqual);
// 4.判断一个点是否在矩形上面
BOOL isContent = CGRectContainsPoint(rect1, CGPointMake(20, 50));
NSLog(@"%d",isContent);