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