黑马程序员---Foundation之常用结构体

———Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ———

Foundation正如其名,是其他所有iOS框架的基础

Foundation框架包含了很多开发中常用的数据类型:结构体、枚举、类

Foundation框架常用的结构体

NsRange

NsPoint\CGPoint

NSSize\CGSzie

NSRect\CGRect

NSRange(范围)

NSRange的定义:

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;
从定义中我们可以看到NSRange有两个参数,locaition表示位置,length表示长度

给NSRange结构体赋值有两种方式:

1:NSRange r1 = {2,3}; //不方便,得看一下定义才能知道是赋值给谁,所以开发中不用这种方式

2: NSRange r2 = {.location = 2, .length = 4} ;// 也不常用,如果参数多的话,一个个写出来太麻烦了
我们经常是用一个Foundation框架自带的一个函数:

NSMakeRange(NSUInteger loc ,NSUInteger len)

这样就很明显,第一个参数是location,第二个参数是length,所以可以直接传参数:

NSMakeRange(2,3);

系统自带的方法中有一个是和范围有关的:rangeOfString:(NSString *) ,返回值是NSRange类型,用法如下:

NSString *str = @"I love OC"; // 创建了一个字符串str
NSRange range = [str rangeOfString:@"ov"];  //查找字符串"ov"在str中的范围,并把返回值赋给结构体变量range
NSLog(@"loc = %ld, length = %ld",range.location,range.length); 
// 打印结果为:loc = 3,length = 2

注意:如果查找的字符串没有的话,那么length= 0,location =NSNotFound

NSPoint \CGPoint(点)

NSPoint的定义:

typedef struct _NSPoint {
      CGFloat x;
      CGFloat y;
} NSPoint;
NSPoint有两个参数,表示这个点的坐标x,y.点击头文件可看到CGPoint和NSPoint定义是一样的,并且有 typedef CGPoint NSPoint;所以CGPoint和NSPoint是一样的,但在开发中一般都是用CGPoint,因为他是跨平台的。

这个结构体的赋值也是用系统自带的函数

一个是:CGPoint p1 = NSMakePoint(10,10); // 因为NSPoint和CGPoint是一样的,所以用NSMakePoint返回的值赋给CGPoint也不会有错

NSPoint p2 = CGPointMake(20,20); // 常用这个

NSSize \CGSize(尺寸)

NSSize的定义

typedef struct _NSSize {
      CGFloat width; //宽度
      CGFloat height;// 高度
} NSSize;

NSSize表示UI元素的尺寸,同样的CGSize也是和NSSize一样,函数名也和之前一样

NSSize s1 = CGSizeMake(100,50);

CGSize s2 = NSMakeSize(100,50);

NSRect \ CGRect

NSRect的定义

typedef struct _NSRect {
      NSPoint origin;
      NSSize size;
} NSRect;
它有两个属性,一个是点,一个是尺寸.CGRect创建方法的函数如下:

CGRect r1 = CGRectMake(0,0,100,50);

如果想看结构体中的所有成员,那么第一种方法,挨个拿出来看

NSLog(@"x=%f,y=%f,with=%f,height=%f",r1.origin.x,r1.origin.y,r1.size.width,r1.size.height);

第二种方法:先把整个结构体转为字符串,然后再打印。

把结构体转成字符串的方法

NSString *str1 = NSStringFormPoint(p1);
NSString *str2  = NSStringFormSize(s2);
NSString *str3  = NSStringFormRect(r1);

另外一种把CGrect转成字符串的方法:

CGRect r2 = {{0,0},{100,90}};

CGRect r3 = {p1,s2};

CGPointMake (0,0)==CGPointZero;//表示原点

所以如果点是原点的话,那么就可以这样来表示了:CGRect r2 = {CGPointZero,{100,90}};

同样的,有CGSizeZero,CGRectZero;

结构体常用函数:

BOOL b = CGPointEqaulToPoint(CGPoint(10,10),CGPoint(10,10));//比较两个点是否相同

同样的有:BOOL b2 = CGSizeEqualToSize(CGSize(100,50),CGSize(80,30)); 

CGRect 的函数:

CGRectContainsPoint(CGRect rect, CGPoint point);判断点是否在Rect范围内

如:BOOL b3 = CGRectContainsPoint({{40,40},{100,50}},{70,80}}); //点(70,80)在(140,90)范围内,所以包含,返回1

注意:使用这些函数的前提是添加CoreGraphics框架

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值