OC基础语法(七)---Foundation框架


一、结构体

表示范围作用的结构体:NSRange(location length)

创建NSRange的3种方式:

例如: @"i love oc"  找到love的范围

1.NSRange r1 = {2,4}; //不用

2.NSRange r2 = {.location = 2,.length = 4};//不用

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

举例:

NSString *str = @"i love oc";

NSRange range = [str rangeOfString:@"ve o"];

NSLog(@"loc = %ld,length = %ld",range.location,range.length);

注:如果找不到,输出结果为:length = 0,location = NSNotFoundation/-1;

另外:

1.表示用来处理几何图形的数据类型:NSPoint/CGPoint(点坐标);

       使用:CGPoint p1 = NSMakePoint(10,10);

         或:NSPoint p2 = CGMakePoint(20,20);//最常用

2.NSSize/CGSize(长度和宽度);

      使用:NSSize s1 = CGMakeSize(100,50);

        或:NSSize s2 = NSMakeSizeI(100,50);

3.矩形数据类型(由点和大小复合而成)NSRect/CGRect;

使用:CGRect(CGPoint CGSize)

几种表示方法:(这几种存储结构)

(1)CGRect *r = {{0,0},{100,90}};

(2)CGRect *r2 = {p1,s1};

(3)CGRect *r3 = {CGPointZero,CGMakeSize(100,90)};

CGRect r1 = CGMakeRect(0,0,100,50);

NSLog(@"x=%f,y=%f,width=%f,height=%f",r1.origin.x,r1.origin.y,r1.size.width,r1.size.height);

将点坐标转化为字符串:

NSString *str = NSStringFromPoint(p1);

NSLog(@"%@",str); 

结果为:{10,10}

将NSSize转化为字符串:

NSString *str2 = NSStringFromSize(s1);

NSLog(@"%@",str); 

结果为:{100,50}

将矩形数据转化为字符串:

NSString *str3 = NSStringFromRect(r1);

NSLog(@"%@",str); 

结果为:{{0,0},{100,50}}

表示原点的方式:

    CGPointZero == CGPointMake(0,0);

CGSizeZero == CGSizeMake(0,0);

CGRectZero == CGRectMake(0,0,0,0);

结构体几种函数的简单介绍:

  (使用这些函数的前提是添加CoreGraphics框架)

1.比较两个点是否相同(x,y):

BOOL b = CGPointEqualToPoint

         (CGPointMake(10,10),CGPointMake(10,10));

比较CGSize和CGRect与上面的同理。

   判断点是否在矩形区域内:

      BOOL b2 = CGRectContainsPoint

                (CGRectMake(50,40,100,50),CGPointMake(130,100));

      结果:b2 = YES

      注:ios坐标系是x向右增大,y向下增大。

二、字符串

     表示字符串的类NSString(不可变字符串)。

 NSString *heigth =

[NSString stringWithFormat : @"You heigth is %d feet,%d inches", 5,11];

创建的类对象包含了指向超类的指针、类名和指向类方法的列表的指针。类对象还包含一个long 的数据,为新创建的类对象指定大小。

字符串的创建:

NSString *s1 = @"rose";

//NSString *s2 = [[NSString alloc] initWithString:@"rose"];

NSString *s2 = [[NSString alloc] initWithFormat:@"age is %d",10];

读取文件(只是文件)内容:

NSString *s3 = [[NSString alloc] initWithContentsOfFile:   

@"/Users/apple/Desktop/1.txt" encoding:NSUTF8String  error:nil];

NSLog(@"%@",ss);

URL:资源路径

    协议头://路径

     file://

     ftp://

     fttp://

例如:

NSURL *url = 

[[NSURL alloc] initWithString:@"file://User/apple/Desktop/1.txt"];

NSString s4 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

NSLog(@"%@",s4);

一般都有个类方法与对象方法配对:

创建一个字符串 : [NSString stringWithFormat:@""];

读取内容:

[NSString stringWithContentsOfFile:

(NSString *) encoding:(NSStringEncoding) error:nil];

NSURL *url2 = [NSURL URLWithString:(NSString *)];

              [NSURL fileURLWithPath:@"文件路径"];

写入文件:(字符串导出)

例1:[@“jack\njack” writeToFile:@"/Users/apple/Desktop/my.txt" 

        Atomically:YES encoding:NSUTF9StringEncoding error:nil];

例2:NSString *str = @"12345456";

NSURL *url=[NSURL fileURLWithPath:@"/Users/apple/Desktop/my.txt"];

[str writeToURL:url atomical:YES 

encoding:NSStringEncoding:NSStringEncoding error:nil];

OC字符串——>C字符串:

const char *cs = [s1 UTF8String];

C字符串——>OC字符串: 

NSString *s3 = [[NSString alloc] initWithUTF8String:"rose"];

NSSMutableString(NSString 的子类,可变字符串)

创建可变字符串:

NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"];

拼接内容到s1的后面:

[s1 appendString:@"11  12"];

删除第四个位置2个长度的字符串:

[s1 deleteCharactersInRange:NSMakeRange(4,2)];

删除某个固定的字符串,例如要删除"is":

NSRange range = [s1 rangeOfString:@"is"];

[s1 deleteCharactersInRange:range];

对比:NSString(不可变字符串)

NSString *s2 = [NSString stringWithFormat:@"age is 10"];

在s2后面添加一个字符串,创建了一个新的字符串,s2不变:

NSString *s3 = [s2 stringByAppendingString:@"11 12"];

NSLog(@"s1=%@,s2=%@",s1,s2);

输出结果:s1="age is 10 11 12",s2="age is 10" 

三、集合

一.NSArray(不可变有序数组):

注意点:oc数组不能存放nil值;

        Oc数组只能存放oc对象,不能存放非oc对象类型,比如int、

        struct、enum等。

创建数组:

1.NSArray *array = [NSArray array];

这个数组永远都是空数组。

2.NSArray *array1 = [NSArray arrayWithObject:@"jack",@"rose",nil];

注:nil是数组元素结束的标志,并没有存放在数组中。

  表示数组元素个数:

  [array1 count];// array1.count;

  NSLog(@"%ld",array1.count);

访问数组元素:

NSLog(@"%@",[array1 objectAtIndex:1]);

输出结果为:rose

或者:NSLog(@"%@",array1[0]);

输出结果为:jackc

编译器新特性:

快速创建一个NSArray对象:

NSArray *array2 = @[@"jack",@"rose",@"123"];

打印:

NSLog(@"%@",@[@"jack",@"rose"]);

结果是: (jack,rose)

遍历元素:

Person *p = [[Person alloc] init];

NSArray *array = @[@"jack",p];

第一种方法:

For(int i=0,i<array.count;i++)

{

    NSLog(@"%@",array[i]);

}

第二种方法:

For( id obj in array) //id obj 代表着数组中的每一个元素

{

   NSLog(@"%@",obj);

}

For(id obj in array)

{

    //找出obj元素在数组中的位置

    NSUInteger i = [array indexOfObject:obj];

    NSLog(@"%ld-%@",i,obj);

    If(i == 1)

    {

          Break;//停止遍历

     }

}

第三种方法:

每遍历一个元素,就会调用block;

并且当前元素和索引当做元素传递给block:

[array enumerateObjectUsingBlock:^(id obj,NSUInteger idx,

BOOL *stop)

{

   NSLog(@"%ld-%@",idx,obj);

   If(idx == 0)

   {

      *stop = YES;//停止遍历

   }

}];

分析第三种方法:

void ^(myblock)(id,NSUInteger,BOOL *)

=^(id obj,NSUInteger idx,BOOL *stop)

{

   NSLog(@"%ld--%@",idx,obj);

   If(idx == 0)

   {

     *stop = YES;

  }

};

For(int i=0;i<array.count;i++)

{

   //用来标记是否要停止

   BOOL isStop = NO;

   //取出元素

   id obj = array[i];

   myblock(obj,i,&isStop);

   If(isStop)

   {

      break;

    }

}

二、NSMutableArray:(可变有序数组)

创建可变数组:

NSMutableArray *array = [NSMutableArray arrayWithObjects:

@"jack",@"rose",nil];

可以添加元素:

[array addObject:[[Person alloc] init]];

[array addObject:@"jim"];

错误写法:

[array addObject:nil];

可以删除元素:

[array removeAllObkect];// 删除所有元素

[array removeObject:@"jack"];//删除指定元素

[array removeObjectAtIndex:0];//删除指定位置的元素

注:@[]只创建不可变数组NSArray

错误写法:

NSMatableArray *array = @[@"jack",@"123"];

三、NSSet(不可变的无序数组)

创建无序数组:

NSSet *s = [NSSet set];//永远为空;

NSSet *s1 = [NSSet setWithObject:@"jack",@"rose",nil];

输出数组的长度:

NSLog(@"%ld",s1.count);    

随机取出一个对象:

NSSet *s3 = [s1 anyObject]; 

  

四、NSMutableSet(可变的无序数组)

创建数组:

NSMutableSet *ss = [NSMutableSet setWithObject:@"jack"];

添加元素:

[ss addObject:@"rose"];

删除元素:

[ss removeObject:@"rose"];

总结,NSSet和NSArray的对比:

1.共同点:

      都是集合,都能存放多个oc对象;

      只能存放oc对象,不能存放非oc对象类型(基本数据类型、结构体、枚举);

      本身都不变,都有一个可变子类。

2.不同点:

  NSArray有序,NSSet无序。

五.字典(无序,不可变)

Key-->value

里面存储的东西都是键值对。

第一种方式创建字典:

NSDictionary *dict = [NSDictionary dictionaryWithObject:

@"jack" forKey:@"name"];

//访问元素

Id obj = [dict objectForKey:@"name"];

NSLog(@"%@",obj);

输出结果为:jack

第二种方式创建:

NSArray *keys = @[@"name",@"address"];

NSArray *objs =  @[@"rose",@"北京"];

NSDictionary *dict2 = [NSDictionary dictionaryWithObject:

objs forKey:keys];

第三种方式创建:

NSDictionary *dict3 = [NSDictionary dictionaryWithObjectAndKeys:

@"jack",@"name",

@"北京",@"address",

@"12333",@"qq",nil];

编译器新特性:(快速创建)

NSDctionary *dict4 =@{@"name":@"jack",@"address":@"北京"};

快速访问:

Id obj = dict4[@"name"];

返回键值对的个数:

NSLog(@"%ld",dict.count);

遍历:

NSDictionary *dict = @{@"address":@"北京",@"name":@"jack"};

第一种方式:

NSArray *keys = [dict allKeys];

For(int i=0;i<dict.count;i++)

{

   NSString *key = keys[i];

   NSString *object = dict[key];

   NSLog(@"%@=%@",key,object);

}    

第二种方式:

[dict enumerateKeysAndObjectUsingBlock:

  ^(id key,id obj,BOOL *stop)

{

   NSLog(@"%@-%@",key,obj);

}]

六、NSMutableDictionaay(可变无序字典)

创建可变字典:

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

添加键值对:

[dictionary setObject:@"jack" forKey:@"name"];

[dictionary setObject:@"北京" forKey:@"address"];

打印:

NSLog(@"%@",dict);

输出结果:

{address = "北京";

 Name = "jack";}  

集合总结:

1.NSArray / NSMutableArray(同一种类型对象)

      *有序;

      *快速创建(不可变类型):@[];

      *快速访问:数组名[i];

2.NSSet / NSMutableSet(同一种类型对象)

      *无序      

3.NSDictionary / NSMutabledictionary(不同类型的对象)                                                                            

      *无序

      *快速创建(不可变类型):@{key1:value1,key2:vlaue2};

      *快速访问:字典名[key];

应用:

NSArray *persons = @[

@{@"name":@"jack",@"qq":@"888888"},

@{@"name":@"rose",@"qq":@"999999"},

@{@"name":@"jim",@"qq":"66666"}];

NSDictionary *jim = persons[2];

先取出1对应的字典,再取出字典中qq对应这个key对应的数据:

NSLog(@"%@",persons[1][@"qq"]);

四、NSNumber、NSValue和NSDate

一、将基本数据类型包装成NSNumber对象:

创建一个NSNumber对象:

NSNumber *n = [NSNumber numberWithDouble:10.5];

将NSNumber对象还原成基本数据类型:

Int d = [n doubleValue];

NSLog(@"%f",d); //10.5

编译器新特性:

1.将基本数据类型包装成一个NSNumber对象:

NSNumber *n1 = @20;

NSNumber *n2 = @10.5;

NSNumber *n3 = @YES;

NSNumber *n4 = @'A';

2.将变量包装成NSNumber对象:

Int age = 20;

NSNumber *n5 = @(age);

解释:NSNumber之所以能够包装基本数据类型,是因为继承了NSValue。

二、NSVable

结构体-->OC对象:

CGPoint p = CGPointMake(10,10);

NSValue *value = [NSValue valueWithPoint:p];

将转化后的对象添加进NSArray数组:

NSArray *array = @[value];

将value转化为对应的结构体:

[value pointValue];

三、NSDate(oc的时间以秒为基本单位)

创建一个时间对象:

NSDate *date = [NSDate date];

NSLog(@"%@",date);

打印出的时间是:0时区时间。

date2比date晚5秒:

NSDate *date2 = [NSDate dateWithTimeInterval:

5sinceDate:date];

从1970年1月1日开始走过的秒数:

NSTimeInterval seconds = [date2 timeIntervalSince1970];

从调用代码到date2隔了多久:

[date2 timeIntervalSinceNow]; 

日期格式化:

NSDateFormatter *formatter = [[NSDateFormatter alloc] 

init];

// y年M月d日

formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";

NSString *str = [formatter stringFromDate:date];

NSLog(@"%@",str);

将字符串转化为时间输出:

NSString *time = @"2011/09/01 18:66";

NSDateFormatter *formatter=[[NSDateFormatter alloc] 

init];

formatter.dateFormat=[Formatter dateFromString:time];

NSLog(@"%@",date);

五、练习

计算代码行数:

/*

考察NSStringNSArray的使用

NSfileManager

*/

#import <Foundation/Foundation.h>

//计算单个文件的代码行数

/*

 path:文件的全路径(可能是文件夹、可能是文件)

返回值int : 代码行数

*/

int codeLineCount(NSString *path)

{

    //获得文件管理者

   NSFileManager *mgr = [NSFileManager defaultManager];

    //判断path是文件夹还是文件路径

    BOOL dir = NO;//标记是否为文件夹

    //BOOL exist = [mgr fileExi] 

   [NSString stringWithContentsOfFile:path atomically:YES 

    encoding:NSUTF8StringEncoding errer:nil];

    NSLog(@"%@",content);

    

    //将文件内容切割成每一行

    NSArray *array = [content componentsSeparatedByString:@"\n"];

  

    int i = 0; 

    for(NSString *line in array)

    {

       NSLog(@"%d - %@",i,line);

       i++;

    } 

    return array.count;

}

int main()

{

    codeLineCount(@"文件夹路径");

    return 0;

}

void test()

{

   NSString *str = @"jack-rose-jim-jake";  

    NSArray *array =  [str componentsSeparatedByString:@"-"];

   

    for(NSString *line in array)

    {

        NSSLog(@"%@",line);

     }

    int count = codeLineCount(@"../Person.m");

 

    NSLog(@"count=%d",count);

}

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值