iOS--Foundation框架-OC常用结构体

 

一、常用结构体

1、NSRange

 

NSRange的定义

typedef struct _NSRange

{

  NSUInteger location;

  NSUInteger length;

} NSRange;

 

NSRange是一个结构体,其中location是一个以0为开始的index,length是表示对象的长度。他们都是NSUInteger类型。 而NSUInteger类型的定义如下:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64

typedef unsigned long NSUInteger;

#else

typedef unsigned int NSUInteger;

#endif

例子:

下面这个例子,将输出IPA

NSString *homebrew = @"Imperial India Pale Ale (IPA)";

 

// Starting at position 25, get 3 characters

NSRange range = NSMakeRange (253);

// This would also work:

// NSRange range = {25, 3};

NSLog (@"Beer shortname: %@", [homebrew substringWithRange:range]);

搜索字符串:

NSString *homebrew = @"Imperial India Pale Ale (IPA)";

NSRange range = [homebrew rangeOfString:@"IPA"];

// Did we find the string "IPA" ?

if (range.length > 0)

  NSLog(@"Range is: %@"NSStringFromRange(range));

 

上面的程序将输出Range is: {253}。NSStringFromRange()方法,将一个NSRange返回一个NSString。而另外一个函数NSRangeFromString()则是将NSString转换为NSRange

下面这个例子将从后向前反向搜索字符串:

NSString *homebrew = @"Imperial India Pale Ale (IPA)";

// Search for the "ia" starting at the end of string

NSRange range = [homebrew rangeOfString:@"ia" options:NSBackwardsSearch];

// What did we find

if (range.length > 0)

  NSLog(@"Range is: %@"NSStringFromRange(range));

上面的程序将输出:Range is: {122}

ac

如果你要获取一个字符串或者一个数组中的一个子集,那么使用NSRange会很方便的定义这个子集。

NSRange定义

Declaration: typedef struct _NSRange {

   NSUInteger location;

   NSUInteger length;

} NSRange;

创建NSRange的方法定义

Declaration: NSRange NSMakeRange (

     NSUInteger loc,

     NSUInteger len

  );

例如获取一个数组的一个子集:

        NSRange range = NSMakeRange(05); 

        NSArray *subArray = [self.states subarrayWithRange:range];

这样就获得了这个数组中0开始的5个元素的子集

 

<span style="font-size:14px;">#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
    @autoreleasepool {
       /*
         NSRange(location length)
         NSPoint\CGPoint
         NSSize\CGSize
         NSRect\CGRect
         */
       NSString *str = @"i love oc";// love的位置
        //        location = 2
        //        length = 3
       NSRange r1 = {2,4};
       NSRange r2 = {.location =2,.length =4};
       NSRange r3 = NSMakeRange(2,4);
       NSString *str2 = @"i love oc too";
        // 查找某个字符串在str中的范围
        //如果找不到,length = 0,location = NSNotFound == -1
       NSRange range = [str rangeOfString:@"ve"];
        NSLog(@"location = %ld,length = %ld",range.location,range.length);
        //        range.location == NSUInteger == unsigned long
        NSLog(@"%ld",NSNotFound);
    }
   return 0;
}</span>

 

 

 

 

 

、NSPoint\CGPoint表示位置,点  NSPoint == CGPoint CGPoint可以跨平台,所以常用CGPoint

 

a、这个结构体有两个CGFloat X和CGFloat Y的成员,其实是double类型b、常用定义方法:NSPoint p = CGPointMake(20,20);
              CGPoint p2 = NSMakePoint(10,10);

 

 

#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
    @autoreleasepool {
      
       NSPoint p1= NSMakePoint(10,10);
       CGPoint p2= CGPointMake(20,20);// 最常用
       NSString *str = NSStringFromPoint(p1);
       BOOL b = CGPointEqualToPoint(p1, p2);
       NSLog(@"%d",b);        
       NSLog(@"%@",str);     
    }
   return 0;
}

 

 

 

 

#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
    @autoreleasepool {
      
       NSPoint p1= NSMakePoint(10,10);
       CGPoint p2= CGPointMake(20,20);// 最常用
       NSString *str = NSStringFromPoint(p1);
       BOOL b = CGPointEqualToPoint(p1, p2);
       NSLog(@"%d",b);        
       NSLog(@"%@",str);     
    }
   return 0;
}

 

 

 


3、NSSize\CGSize表示一个UI元素的尺寸NSSize == CGSize
a、这个结构体有两个CGFloat width和CGFloat height成员
b、常用定义方法:NSSize s = CGSizeMake(100,50);
              CGSize s = NSMakeSize(100,50);

 

 

 

 

 

#import <Foundation/Foundation.h>
int main(int argc,const char * argv[]) {
    @autoreleasepool {    
       NSSize s1 = NSMakeSize(100, 50);
       CGSize s2 = CGSizeMake(100,50);
       NSSize s3 = CGSizeMake(200,60);
       NSString *str = NSStringFromSize(s3);
       NSLog(@"%@",str);
       BOOL b = CGSizeEqualToSize(s1, s2);
       NSLog(@"%d",b);
    }
   return 0;
}

4、NSRect\CGRect (CGPoint,CGSize) NSRect == CGRect
a、NSRect有NSPoint origin和NSSize size两个成员
#import <Foundation/Foundation.h>
// CGRect实现函数
CGRect myRect(CGFloat x,CGFloat y, CGFloat width,CGFloat height)
{
   CGRect rect;
    rect.origin.x = x;
    rect.origin.y = y;
    rect.size.width = width;
    rect.size.height = height;    
   return rect;
}

int main(int argc,const char * argv[]) {
    @autoreleasepool {
       CGRect r1 = CGRectMake(0,0, 100, 50);
       /*
         struct CGRect {
            CGPoint origin;
            CGSize size;
         */
        // 想要把r1内所有属性输出看看
    NSLog(@"x=%.2f, y=%f, width=%f, height=%f",r1.origin.x, r1.origin.y, r1.size.width, r1.size.height);
       //另一种方法
       NSString * str = NSStringFromRect(r1);
       NSLog(@"%@", str);
        // 创建NSRect的其他方式
       CGRect r2 = {{0,0},{100,50}};
       CGPoint p1 = CGPointMake(10,10);
       CGSize s2 = CGSizeMake(100,90);
       CGRect r3 ={p1,s2};
       /*
        CGPointZero == CGPointMake(0, 0);返回值是const常量,
        CGSizeZero;
        CGRectZero;
         */
       CGRect r4 = {CGPointZero,CGSizeMake(100,90)};
        // 判断两个Rect是否相同
       BOOL b = CGRectEqualToRect(r1, r2);
       NSLog(@"%d",b);
        //下面的高级功能属于CoreGrapgics框架,以CG开头的功能基本都在这里
        // 判断Rect是否包含Point
       BOOL b2 = CGRectContainsPoint(r4, p1);
       /*
          point表示rect左上角的点,因为左上角是坐标原点,向右和向下增加
         */
       NSLog(@"%d",b2);                      
    }
   return 0;
}

 

 

 

 

 

二、常用类– NSString

 

1、NSString : 不可变字符串

GPoint p2 = NSMakePoint(10,10);

 

#import <Foundation/Foundation.h>
/*
 NSString:不可变字符串
 NSMutableString:可变字符串,是NSString的子类
 */
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1、字符串的创建
        NSString *s1 = @"321321321";
//        NSString *S2 = [[[NSString alloc] initWithString:@"jack"];// 这种没人用了现在报错
        NSString *s3 = [[NSString alloc]initWithFormat:@"age is %d",10];
        // C字符串转OC字符串
        NSString *s4 = [[NSString alloc]initWithUTF8String:"jack"];// 不要写@
        // 将OC字符串转为C语言字符串
        const char * c = [s4 UTF8String];
        // 从文件中读取字符串,传入绝对路径, // NSUTF8StringEncoding用到中文就可以用这种编码
        NSString *s5 = [[NSString alloc]initWithContentsOfFile:@"/Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c"encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"%@",s5);
        // URL : 资源路径
        // 协议头://路径
        // 网络资源http://weibo.com/a.png
        // 本地文件file://
        // ftp服务器上ftp://
        // NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c;
        // 利用类方法创建url
        NSURL *url = [NSURL fileURLWithPath:@"/Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c"];
        NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"s6=\n%@", s6);
        // 利用类方法创建(一般都会有一个类方法跟对象方法配对)
//        [NSString stringWithFormat:@""];
//        [NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
//        [NSURL URLWithString:<#(NSString *)#>];
        // 将字符串写入文件:写YES写入失败文件不会创建新文件
        [@"jack\njack" writeToFile:@"/Users/lanwendong/Desktop/黑马程序员_IOS开发零基础教程源代码和PPT/课程代码/代码/0724/代码/02-第二个C语言程序.c" atomically: YES encoding:NSUTF8StringEncoding error:nil];
        NSString *str = @"12312321";
        [str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
    }
    return 0;
}

2、NSMutableString :可变字符串
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableString  *s1 = [NSMutableString stringWithFormat:@"age is %d",10];
        
        NSString *s2 = [[NSString alloc]initWithFormat:@"age is %d",10];
        
        // 拼接内容到s1的后面
        [s1 appendString:@"11 12"];// 无返回值
        // 获取“is”的范围
        NSRange range = [s1 rangeOfString:@"is"];
        // 删除指定范围内的字符
        [s1 deleteCharactersInRange:range];
        
        //这个方法会拿到s2的字符串拷贝一份,进行拼接,赋值给s3形成新的字符串,原来的不便
        NSString *s3 = [s2 stringByAppendingString:@"11 12"];// 有返回值
    }
    return 0;
}

 

 

两者的主要区别是后者可被改变,前者不可被改变,就算调用了stringByAppendingString:@"11 12"也只是创建一个新的不可变字符串

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值