在Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结构体完全采用Objective-C定义,和我们自己定义的结构体没有任何区别,之所以由框架为我们提供完全是为了简化我们的开发。常用的结构体有NSRange、NSPoint、NSSize、NSRect等。
先复习下结构体的两种定义方式:
void test() { // 定义了Date这种结构体类型 struct Date { int year; int month; int day; }; // 定义结构体变量 struct Date d = {2013, 4, 5}; d.day = 6; } void test1() { typedef struct Date { int year; int month; int day; } MyDate; MyDate d = {2013, 4, 5}; }
1.NSRange
这个结构体用来表示一个事物的范围,通常是字符串里的字符范围或者集合里的元素范围。通常有三种方式创建NSRange变量。
- 第一种:直接给成员赋值
NSRange range;
range.location = 2;
range.length = 5;
- 第二种:应用C语言的聚合结构赋值机制
NSRange range = {2, 5};
或者,
NSRange range = {.location = 2, .length = 3};
- 第三种:Foundation框架提供的一个快捷函数NSMakeRange(推荐使用)
void range() { NSRange range = NSMakeRange(8, 10); NSLog(@"location:%zi", range.location); NSLog(@"length:%zi", range.length); NSString *str = NSStringFromRange(range); NSLog(@"%@", str); // NSLog(@"%@", range); 错误的做法,%@代表着OC对象 }
备注:OC中的方法和函数略有区别:方法是要通过类名(+)或对象(-)来调用的。
2.NSPoint
NSPoint和CGPoint是等价的,表示平面中的一个点。其创建方法与NSRange类似:
void point() { // NSPoint p; CGPoint p; p.x = 1; p.y = 10; p = NSMakePoint(10, 9); // 常见的方式 p = CGPointMake(8, 9); NSString *str = NSStringFromPoint(p); NSLog(@"%@", str); }
3.NSSize
NSSize和CGSize等价,用来存储宽度和高度。其创建方式类似:
void size() { CGSize size; // NSSize size; size.width = 100; size.height = 90; size = NSMakeSize(90, 80); size = CGSizeMake(10, 8); NSString *str = NSStringFromSize(size); NSLog(@"%@", str); }
4.NSRect
NSRect与CGRect等价,用来存储矩形,其内部又包含了两个结构体:CGPoint和CGSize。其创建方式类似:
void rect() { NSRect rect; // CGRect rect; rect.origin.x = 10; rect.origin.y = 11; rect.size.width = 100; rect.size.height = 90; rect = NSMakeRect(10, 10, 80, 80); rect = CGRectMake(8, 9, 10, 90); NSString *str = NSStringFromRect(rect); NSLog(@"%@", str); }