⑩--Foundation框架基础

OC的基本语法告一段落了,今天开始学习Foundation框架。

1.Foundation框架介绍

之前已经介绍了什么是框架以及如何使用一个框架。Foundation框架是其他所有iios框架的基础

Foundation框架包含了很多开发中常用的数据类型:

√结构体

√枚举

√类

要想使用Foundation框架中的数据类型,包含它的主头文件即可

#import <Foundation/Foundation.h>

下面介绍Foundation框架中的一些常见的基本用法。

2.常用结构体--NSRange、NSPoint/CGPoint、NSSize/CGSize、NSRect\CGRect

①NSRange是表示范围的结构体,它在Foundation中的定义如下:

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

可以看出NSRange有两个变量组成:

一个是代表位置的location;

一个是代表长度的length。

这两个变量的类型都是NSUInteger类型,对于NSUInteger其实就是无符号的长整型:

#if __LP64__ || (TARGET_OS_EMBEDDED && !TARGET_OS_IPHONE) || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

NSRange有如下的用途:

例如@"i love oc"这个字符串中,有个子串@"love",他在@"i love oc"中的范围用NSRange表示就是:location为2,length为4.

如何声明并初始化一个NSRange:

按照C语言中对结构体初始化的方法:

NSRange r1 = {2, 4}; // 不用
NSRange r2= {.location = 2, .length = 4}; // 不用
上面的两种初始化方法在官方是不推荐的,它推荐使用下面的方式进行初始化:

NSRange r3 = NSMakeRange(2, 4); // 掌握


NSRange常见的一个用法

查找某个字符串在str中的范围

NSString *str = @"i love oc";
// 查找某个字符串在str中的范围
NSRange range1 = [str rangeOfString:@"love"];

NSLog(@"loc = %ld, length = %ld", range1.location, range1.length); // ->loc = 2, length = 4

如果找不到,length = 0location=NSNotFound==-1%d

NSString *str = @"i love oc";
// 查找某个字符串在str中的范围
// 如果找不到,length = 0,location=NSNotFound==-1%d
NSRange range2 = [str rangeOfString:@"java"];

NSLog(@"loc = %ld, length = %ld", range2.location, range2.length); // ->loc = NSNotFound ,length = 0

(注:实际上上面loc的值是 9223372036854775807 它其实表示的是长整型数值的-1)

②NSPoint\CGPoint、NSSize/CGSize、NSRect\CGRect

顾名思义,我们可以猜测NSPoint表示的是点,实际上NSPoint的定义为:

typedef CGPoint NSPoint;

而CGPoint的定义为:

struct CGPoint {
  CGFloat x;
  CGFloat y;
};
typedef struct CGPoint CGPoint;
显然CGPoint里面定义了表示点的两个坐标值:x和y。它们都是CGFloat类型的数据:

# define CGFLOAT_TYPE double
typedef CGFLOAT_TYPE CGFloat;

可见CGFloat其实就是double类型。

按照刚才初始化一个NSRange类型的数据的方式初始化一个NSPoint:

CGPoint p1 = NSMakePoint(10, 10);

但实际上最常用的是另一种方法:

NSPoint p2 = CGPointMake(10, 10); // 最常用

再看 NSSize/CGSize,它们在Foundation中的定义是这样的:

typedef CGSize NSSize;

struct CGSize {
  CGFloat width;
  CGFloat height;
};
typedef struct CGSize CGSize;

同样地,也有初始化它们的类似方法:

NSSize s1 = NSMakeSize(100, 50);
NSSize s2 = CGSizeMake(100, 50);

再看 NSRect\CGRect,它们的定义如下:
typedef CGRect NSRect;

struct CGRect {
  CGPoint origin;
  CGSize size;
};
typedef struct CGRect CGRect;

NSRect\CGRect常用来表示UI元素在屏幕中的区域,包括CGPoint类型的原点origin,和CGSize类型的size。

初始化它们有如下方法:

NSRect r1 =  CGRectMake(0, 0, 100, 50); //方式1

CGRect r2 = {
  {0, 0}, {100, 90}}; // 方式2

CGPoint p1 = NSMakePoint(10, 10);
NSSize s1 = NSMakeSize(100, 50);
CGRect r3 = {p1, s1}; // 方式3
也可以这样初始化:

CGRect r4 = {CGPointZero, CGSizeMake(100, 90)};

其中 CGPointZero == CGPoint(0, 0); 表示 (0, 0) 点。

在Foundation中拥有将结构体直接转为字符串的全局方法:

NSRect r1 =  CGRectMake(0, 0, 100, 50);
NSString *str = NSStringFromRect(r1); // 将结构体转为字符串打印
NSLog(@"%@", str);
输出的结果为:

2014-12-28 10:52:24.514 01-结构体[615:303] {
  {0, 0}, {100, 50}}
NSPoint\CGPoint、 NSSize/CGSize、NSRect\CGRect有就几个在开发中常用的函数:

// 使用这些函数的前提是添加CoreGraphic框架
// 比较两个点是否相同(x, y)
BOOL b = CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));

BOOL b1 = CGRectContainsPoint(CGRectMake(0, 0, 100, 50), CGPointMake(2, 3));
NSLog(@"%d", b1);

输出结果为:

2014-12-28 10:55:06.695 01-结构体[626:303] 1

3.NSString类和NSMutableString类

①NSString类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值