18-常见结构体-foundation

(一)NSRang的基本使用

lFoundation/NSRange.h中对NSRange的定义

typedef struct _NSRange {

    NSUInteger location;

    NSUInteger length;

} NSRange;

// typedef unsigned long NSUInteger;

l这个结构体用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围
llocation表示该范围的起始位置 (location从0 开始)
llength表示该范围内所含的元素个数

l比如”I love objective-c”中的”obj”可以用location7length3的范围来表示

(二)NSPoint/CGPoint的使用

l Foundation/NSGeometry.h中对NSPoint的定义

typedef CGPoint NSPoint;

lCoreGraphics/CGGeometry.h中对CGPoint的相关定义

struct CGPoint {

  CGFloat x;

  CGFloat y;

};

typedef struct CGPoint CGPoint;

// #define CGFLOAT_TYPE double

// typedef CGFLOAT_TYPE CGFloat;

lNSPointCGPoint是等价的

l这个结构体代表的是平面中的一个点(x, y)

(三)NSSize/CGSize的使用

lFoundation/NSGeometry.h中对NSSize的定义

typedef CGSize NSSize;

lCoreGraphics/CGGeometry.h中对CGSize的相关定义

struct CGSize {

  CGFloat width;

  CGFloat height;

};

typedef struct CGSize CGSize;

l这个结构体用来存储宽度和高度

l可以利用NSMakeSize()CGSizeMake()创建CGSize

(四)NSRect/CGRect的使用

lFoundation/NSGeometry.h中对NSRect的定义

typedef CGRect NSRect;

lCoreGraphics/CGGeometry.h中对CGRect的相关定义

struct CGRect {

  CGPoint origin; // 矩形左上角坐标

  CGSize size; // 矩形的宽度和高度

};

typedef struct CGRect CGRect;

l这个结构体用来存储位置和宽高

l可以利用NSMakeRect()CGRectMake()创建CGRect

(五)Foundation框架中一些经常用到的结构体函数



=================================


struct和typedef struct 

struct在代码中常见两种形式: 
struct A 
{ 
//... 
};

前者叫做“结构体类型定义”,意思是:定义{}中的结构为一个名称是“A”的结构体。 

struct 
{ 
//... 
} A; 
后者是结构体变量定义,意思是:以{}中的结构,定义一个名称为"A"的变量。这里的结构体称为匿名结构体,是无法被直接引用的。 

typedef中一般是: 
typedef struct tagA //故意给一个不同的名字,作为结构体的实名 
{ 
//... 
} A; //结构体的别名。


也可以通过typedef为匿名结构体创建一个别名,从而使得它可以被引用: 
typedef struct 
{ 
//... 
} A; //定义匿名结构体的别名为A

==============================


//  main.m

//  Foundation1-结构体

//

//  Created by amesty on 15-1-18.

//  Copyright (c) 2015 itcast. All rights reserved.

//

//定义了Date类型的结构体

void test()

{    struct  Date

    { int year;

        int month;

        int day;

    };

    //定义结构体变量

    struct Date day={2015,1,18};

    day.day=6;

    NSLog(@"日时期是%d%d%d",day.year,day.month,day.day);

}

void test1()

{   typedef   struct  Date

    { int year;

        int month;

        int day;

    }Mydate;

    //定义结构体变量

    Mydate day={2015,1,18};

    day.day=6;

    NSLog(@"日时期是%d%d%d",day.year,day.month,day.day);

}

/**

l3种方式创建一个NSRange变量
l1直接给成员赋值

NSRange range;

range.location = 7;

range.length = 3;

l2种:应用C语言的聚合结构赋值机制

NSRange range = {7, 3};

或者 NSRange range = {.location = 7,.length = 3};

l3种:Foundation框架提供的一个快捷函数NSMakeRange

NSRange range = NSMakeRange(7,3);

*/

void range()

{

    NSRange range=NSMakeRange(88);

    NSLog(@"location:%zi",range.location);

    NSLog(@"length:%zi",range.length);

    NSString *str=NSStringFromRange(range);

  //  NSLog(@"%@",range); %@代表这对象

    NSLog(@"%@",str);

}

/**

lFoundation框架提供了一个NSMakePoint()创建NSPoint

NSPoint point = NSMakePoint(10, 20);

或者

CGPoint point = NSMakePoint(10, 20);

lCoreGraphics框架中也提供了CGPointMake()创建一个NSPoint(CGPoint)

NSPoint point = CGPointMake(10, 20);

或者

CGPoint point = CGPointMake(10, 20);


*/

void point()

{

    NSPoint p; //CGpoint;

    p.x=10;

    p.y=8;

    p=NSMakePoint(1111);

    NSString * str=NSStringFromPoint(p);

    NSLog(@"%@",str);

}

void size()

{

    NSSize size;

    size=NSMakeSize(34);

    NSString * str=NSStringFromSize(size);

     NSLog(@"%@",str);

}


void rect()

{  NSRect rect;

    rect.origin.x=0;

    rect.origin.y=0;

    rect.size.width=3;

    rect.size.height=4;

    rect=NSMakeRect(00,34);


}

#import <Foundation/Foundation.h>


int main(int argc, const char * argv[])

{


    @autoreleasepool {

        range();

        point();

        size();

        rect();

             // insert code here...

        NSLog(@"Hello, World!");

        

    }

    return 0;

}









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值