Objective-C:Foundation框架-结构体

  在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);
}
原文地址:https://www.cnblogs.com/yif1991/p/5066606.html