首页 > 代码库 > Foundation 框架中常用的结构体详解
Foundation 框架中常用的结构体详解
Foundation 框架包含了很多开发常用的数据类型:
Foundation中包含的数据类型:
结构体
枚举
类
要想使用 Foundation 中的数据类型,只要包含主头文件即可。
#impot <Foundation/Foundation.h>
结构体:
我们常用的结构体有:NSRange、NSPoint (CGPint )、NSSize(CGSize)、NSRect(CGRect)
NSRange:是用来表示位置和范围的。
本质是:
1 typedef struct _NSRange {2 NSUInteger location;3 NSUInteger length;4 } NSRange;
NSRange: 的使用
我们常用的几种NSRange类型变量range的赋值方式
@"i love oc!" @"love" 的range
NSRange range = {2, 4}; // 这种方式我们基本不用
NSRange range = {.location = 2, .length = 4}; // 这种方式我们基本不用
NSRange range = NSMakeRange(2, 4); // 这个是我们主要使用的方式,要求熟练掌握。
// NSRange 的使用 // 查找一个字符串在另外一个字符串中的位置 // 定义一个字符串str NSString *str = @"i love oc!"; // 这个是用来获取一个字符串love在另一个字符串str中的range NSRange range = [str rangeOfString:@"love"]; // 将获取的位置和长度输出 NSLog(@"love在str中的位置是%ld, 长度是%ld",range.location, range.length);
· 我们使用 %ld 主要是因为 range 的成员是 NSUInterger 类型
运行结果是:
2015-01-05 16:04:15.525 Foundation框架[1938:303] love在str中的位置是2, 长度是4
Program ended with exit code: 0
当我们要查找的字符串找不到的时候
1 // NSRange 的使用 2 // 查找一个字符串在另外一个字符串中的位置 3 4 // 定义一个字符串str 5 NSString *str = @"i love oc!"; 6 7 // 这个是用来获取一个字符串love在另一个字符串str中的range 8 NSRange range = [str rangeOfString:@"sb"]; 9 10 // 将获取的位置和长度输出11 NSLog(@"love在str中的位置是%ld, 长度是%ld",range.location, range.length);
运行结果是:
2015-01-05 16:05:59.707 Foundation框架[1946:303] love在str中的位置是9223372036854775807, 长度是0
Program ended with exit code: 0
range.location = NSUInterger = unsigned long
range.location:是一个无符号类型的数据 所以显示的是:9223372036854775807
如果换成有符号的数据,值就是-1;也就等于NSNotFound。
没有找到的时候,location的返回值就是NSNotFound。
NSPoint (CGPint ):用来定义一个坐标,表示UI中的一个元素的位置。
(在开发中我们是使用CGPint 。CGPint是夸平台的,可以在Mac上使用,也可以在ios上使用。)
本质是:
1 typedef struct _NSPoint {2 CGFloat x;3 CGFloat y;4 } NSPoint;
NSSize(CGSize) :用来定义一个 UI 元素的尺寸的。
(在开发中我们是使用CGSize ,CGSizet是夸平台的,可以在Mac上使用,也可以在ios上使用。)
1 typedef struct _NSSize {2 CGFloat width; /* should never be negative */3 CGFloat height; /* should never be negative */4 } NSSize;
NSRect(CGRect):是 NSPoint (CGPint )和 NSSize(CGSize) 的结合体,是用来表示一个UI元素的位置和尺寸。
1 typedef struct _NSRect {2 NSPoint origin;3 NSSize size;4 } NSRect;
Foundation框架中的结构体在使用的过程中,我们使用的最多的方式就是给结构体变量赋值和将结构体转换位字符串输出。
结构体变量的赋值我们使用的是调用一个函数来给结构体变量赋值,而不是使用结构体的性质赋值。
这样可以使代码更加的清晰明了,简洁易懂。
下面是几个函数的定义:
NSMakeRange
1 NS_INLINE NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {2 NSRange r;3 r.location = loc;4 r.length = len;5 return r;6 }
NSMakePoint
1 NS_INLINE NSPoint NSMakePoint(CGFloat x, CGFloat y) {2 NSPoint p;3 p.x = x;4 p.y = y;5 return p;6 }
CGPointMake
1 CG_INLINE CGPoint2 CGPointMake(CGFloat x, CGFloat y)3 {4 CGPoint p; p.x = x; p.y = y; return p;5 }
NSMakeSize
1 NS_INLINE NSSize NSMakeSize(CGFloat w, CGFloat h) {2 NSSize s;3 s.width = w;4 s.height = h;5 return s;6 }
CGSizeMake
1 CG_INLINE CGSize2 CGSizeMake(CGFloat width, CGFloat height)3 {4 CGSize size; size.width = width; size.height = height; return size;5 }
NSMakeRect
1 NS_INLINE NSRect NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h) {2 NSRect r;3 r.origin.x = x;4 r.origin.y = y;5 r.size.width = w;6 r.size.height = h;7 return r;8 }
CGRectMake
1 CG_INLINE CGRect2 CGRectMake(CGFloat x, CGFloat y, CGFloat width, CGFloat height)3 {4 CGRect rect;5 rect.origin.x = x; rect.origin.y = y;6 rect.size.width = width; rect.size.height = height;7 return rect;8 }
这个是函数的调用:
NSRange range = NSMakeRange(NSUInteger loc, NSUInteger len); NSPoint point = NSMakePoint(CGFloat x, CGFloat y); CGPoint point = CGPointMake(CGFloat x, CGFloat y); NSSize size = NSMakeSize(CGFloat w, CGFloat h); CGSize size = CGSizeMake(CGFloat width, CGFloat height); NSRect rect = NSMakeRect(CGFloat x, CGFloat y, CGFloat w, CGFloat h); CGRect rect = CGRectMake(CGFloat x, <GFloat y, CGFloat width, CGFloat height);
将NSRange、NSPoint、NSSize、NSRect结构体转换位字符串:(我们打印结构体的时候是装换为字符串后在打印)
1 NSString *str = NSStringFromRange(NSRange range);2 NSString *str = NSStringFromPoint(NSPoint aPoint);3 NSString *str = NSStringFromSize(NSSize aSize);4 NSString *str = NSStringFromRect(NSRect aRect);
Foundation 框架中常用的结构体详解