黑马程序员——OC笔记之Foundation框架上

------- android培训、java培训、iOS培训、.Net培训、期待与您交流! ----------

什么是Foundation框架?

框架:众多功能/API的集合

Foundation框架:在OS X下的Mac操作系统中大约有80个框架为所有程序开发奠定基础的框架

Foundation框架中大约有125个可用的头文件,要想使用Foundation框架中的功能,这么一句即可: #import  

实际上导入了其他所有Foundation框架中的头文件 

Foundation框架提供了非常多好用的类,比如

  • NSString:字符串
  • NSRange:结构体
  • NSArray:数组
  • NSDictionary:字典
  • NSDate:日期
  • NSData:数据
  • NSNumber:数字

字符串(NSString)

什么是NSString?
一个NSString对象就代表一个字符串(文字内容)
一般称NSString为字符串类
字符串的使用方法如下:

1、比较字符串的大小

#import 

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //定义两个字符串
        NSString *str1 = @"bc";
        NSString *str2 = @"Bcc";
        //比较字符串大小,默认区分大小写
//        NSComparisonResult result=[str1 compare:str2];
        
        // NSCaseInsensitiveSearch 不区分大小写,且 NSNumericSearch 比较的是字符串的长度
        NSComparisonResult result=[str1 compare:str2 options:NSCaseInsensitiveSearch|NSNumericSearch];
        
        switch (result) {
            case NSOrderedAscending:
                NSLog(@"str1str2");
                break;
            default:
                break;
        }   
    }
    return 0;
}

2、前后缀检查

NSString *str1 = @"http://www.baidu.com";

//判断字符串前缀

if ([str1 hasPrefix:@"http://"]||[str1 hasPrefix:@"https://"]){ NSLog(@"这是一个网址"); }else{ NSLog(@"这不是一个网址"); } NSString *str2 = @"xxxxx.doc"; //判断字符串后缀 if ([str2 hasSuffix:@".jpg"]||[str2 hasSuffix:@".png"]||[str2 hasSuffix:@".jpeg"]||[str2 hasSuffix:@".gif"]) { NSLog(@"这是一个图片"); } else { NSLog(@"这不是一个图片"); }

3、字符串的截取和替换

//              012345678
NSString *str =@"黑马IOS学院";

//截取字符串
        //从XX位置开始,到最后结束(包含XX位置)
NSString *newStr= [str substringFromIndex:8];
NSLog(@"newStr=%@",newStr);

         //从起始,到XX位置(不包含XX位置)
newStr = [str substringToIndex:8];
NSLog(@"newStr=%@",newStr);

//截取指定长度及位置的字符串 
//求出所要截取的字符串起始及末尾的位置
NSUInteger loc= [str rangeOfString:@">"].location+1;
NSUInteger len= [str rangeOfString:@"

4、NSString的其他用法

NSString *str =@"3.14159";
for (int i=0; i<[str length]; i++) {
            
      //获取OC字符串的每个字符
      unichar c= [str characterAtIndex:i];
      printf("%c  ",c);
}

//OC字符串与其他数据类型的转换
float f=[str floatValue];
f=f+3;
        
//OC字符串与C语言字符串的转换
NSString *str1=@" hello world! ";
const char *ch= [str1 UTF8String];
       
NSString *str2=[NSString stringWithUTF8String:ch];
NSLog(@"----%@----",str2);
        
//去除所有的空格
str2=[str1 stringByReplacingOccurrencesOfString:@" " withString:@""];
        
//去除首尾空格
str2=[str1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

可变字符串(NSMutableString)

NSMutableString是NSString的子类

NSMutableString和NSString的区别:

NSString是不可变的,  里面的文字内容是不能进行修改的

NSMutableString是可变的,里面的文字内容可以随时更改

NSMutableString能使用NSString的所有方法

1、可变字符串的基本用法

#import 

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

        //定义一个存储空间和内容可变的字符串
        NSMutableString *str=[NSMutableString stringWithFormat:@"Jack"];
        //添加子字符串
        [str appendString:@"&Rose"];
        NSLog(@"%@",str);
        
        //创建一个空的可变字符串
        NSMutableString *str1=[NSMutableString string];
        for (int i=0; i<10; i++) {
            [str1 appendString:@"itcast "];
        }
        NSLog(@"%@",str1);
    }
    return 0;
}

2、NSMutableString的常见用法

#import 

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

        //创建一个空字符串
//        NSMutableString *str = [NSMutableString string];
        //格式化创建一个字符串
        NSMutableString *str1=[NSMutableString stringWithFormat:@"http://"];
        NSLog(@"%@",str1);
        
        //格式化添加子字符串
        [str1 appendFormat:@"**baidu.com/%d",100];
        NSLog(@"%@",str1);
        
        //删除子字符串
        [str1 deleteCharactersInRange:NSMakeRange(7, 2)];
        NSLog(@"%@",str1);
        
        //插入子字符串
        [str1 insertString:@"www." atIndex:7];
        NSLog(@"%@",str1);
        
        //替换子字符串
        [str1 replaceCharactersInRange:NSMakeRange(11, 5) withString:@"ithema"];
        NSLog(@"%@",str1);
        
        //覆盖原字符串
        str1.string=@"http://";
        NSLog(@"%@",str1);
    }
    return 0;
}

数组(NSArray)

NSArray是OC中的数组类,开发中建议尽量使用NSArray替代C语言中的数组

NSArray的使用注意:

只能存放任意OC对象,并且是有顺序的

不能存储非OC对象,比如int/float/double/char/enum/struct等

它是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的,不能删除里面的元素,也不能再往里面添加元素

1、NSArray的基本用法

#import 

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

        //数组的存储空间和内容不可改变
        //只能存储OC对象
        //1)创建一个空数组,没有意义
        NSArray *arr1=[NSArray array];

        //2)创建只有一个元素的数组
        NSArray *arr2=[NSArray arrayWithObject:@"one"];

        //3) 创建含有多个元素的数组
//        (常用方法)
        NSArray *arr3=[NSArray arrayWithObjects:@"one",@"two",@1, nil];

        //4)调用对象方法创建数组
        NSArray *arr4=[[NSArray alloc]initWithObjects:@"three",@"four",[NSNull null], nil];

        //5)用一个数组创建另一个数组
        NSArray *arr5=[NSArray arrayWithArray:arr3];
    }
    return 0;
}

2、NSArray的常见用法

#import 

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

        NSArray *arr3=[NSArray arrayWithObjects:@"one",@"two",@1, nil];
        //获取数组的长度
        NSLog(@"%lu",arr3.count);

        //根据下标,获取对应的对象
        NSString *str= [arr3 objectAtIndex:1];
        NSLog(@"%@",str);

        //根据对象,获取对应的下标
        NSUInteger loc= [arr3 indexOfObject:@"one"];
        NSLog(@"%lu",loc);

        //判断数组中是否包含了某个元素
        if ([arr3 containsObject:@"three"]) {
            NSLog(@"包含了该元素");
        } else {
            NSLog(@"不包含该元素");
        }
        
        //简化方式创建数组
        NSArray *arr1=@[@"one",@'a',@"'a'",@1,@"2"];
        
        for (int i=0; i

3、NSArray的文件读写

NSArray *array = @[@"one",@"zbz",@"cgx",@"aj",@"cjk"];
//    写入文件/Users/Linhan/Desktop/array.plist
if([array writeToFile:@"/Users/Linhan/Desktop/array.plist" atomically:YES]){
        NSLog(@"写入成功");
            }
else{
        NSLog(@"写入失败");
            }
//    读取文件
array=[NSArray arrayWithContentsOfFile: @"/Users/Linhan/Desktop/array.plist"];
NSLog(@"%@",array);

4、NSarray与字符串转换

NSArray *array=@[@1,@2,@3,@4,@5];

//将数组元素连接成字符串
NSString *str=[array componentsJoinedByString:@"-"];
NSLog(@"%@",str);
        
NSString *str1=@"400-800-12580";

//将字符串分割成数组
array= [str1 componentsSeparatedByString:@"-"];
NSLog(@"%@",[array firstObject]);
NSLog(@"%@",[array lastObject]);
NSLog(@"%@",array[1]);

可变数组(NSMutableArray)

NSMutableArrayNSArray子类

NSArray是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的,不能删除里面的元素,也不能再往里面添加元素

NSMutableArray是可变的,随时可以往里面添加/更改/删除元素

可变数组的使用方法

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

        //1、创建数组
        //1)创建一个空数组
        NSMutableArray *arr1=[NSMutableArray array];
        //2)创建的时候初始化一个元素
        NSMutableArray *arr2=[NSMutableArray arrayWithObject:@"one"];
        //3)创建的时候初始化多个元素
        NSMutableArray *arr3=[NSMutableArray arrayWithObjects:@"one",@"two",@"three",@"four", nil];
        //4)创建一个数组,并指定长度
        NSMutableArray *arr4=[NSMutableArray arrayWithCapacity:5];
        
        //2、添加元素
        [arr1 addObject:@"two"];

        //插入元素到指定位置
        [arr2 insertObject:@"five" atIndex:0];

        //3、删除元素
        //根据对象内容删除
        [arr3 removeObject:@"three"];
        NSLog(@"%@",arr3);
        //根据位置删除
        [arr3 removeObjectAtIndex:1];
        NSLog(@"%@",arr3);
        //全部删除
//        [arr3 removeAllObjects];
 
        //4、修改元素
        [arr3 replaceObjectAtIndex:1 withObject:@2];
        NSLog(@"%@",arr3);
        //简化修改,同C语言一样
        arr3[0]=@"two";
        NSLog(@"%@",arr3);

        //5、查找元素
        BOOL isSearch= [arr3 containsObject:@"two"];
        NSLog(@"%d",isSearch);
        
        //6、交换元素
//        NSMutableArray *array=@[@1,@2,@3,@4]; //这种是不可改变数组,不能交换
        NSMutableArray *array=[NSMutableArray arrayWithObjects:@1,@2,@3,@4,@5, nil];
        //可以交换数组元素
        [array exchangeObjectAtIndex:0 withObjectAtIndex:4];
        NSLog(@"%@",array);
    }
    return 0;
}

字典(NSDictinary)

NSDictionary翻译过来叫做”字典”

日常生活中, “字典”的作用:通过一个拼音或者汉字,就能找到对应的详细解释

NSDictionary的作用类似:通过一个key,就能找到对应的value

NSDictionary是不可变的,一旦初始化完毕,里面的内容就无法修改

1、NSDictionary字典的使用方法

#import 

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

        //1、创建一个空字典,因为不可变,没有意义
//        NSDictionary *dict1=[NSDictionary dictionary];

        //2、创建只有一组键值对的字典
        NSDictionary *dict2=[NSDictionary dictionaryWithObject:@"张三" forKey:@"zs"];
        NSLog(@"%@",dict2);
        
        //3、创建多组键值对的字典   (注意:value和key值,都必须是对象)
        NSDictionary *dict3=[NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3", nil];
        NSLog(@"%@",dict3);//以%@格式打印字典,控制台输出一个{   },无序输出
        
        //4、快速创建一个字典,格式:@{...,key值:value值,...}
        //key值不能重复,重复不会报错,但后添加的也不能保存到字典中
        NSDictionary *dict4=@{@"zs":@"zhangsan",@"ls":@"lisi",@"ww":@"wangwu",@"zs":@"zhaosi"};
        NSLog(@"%@",dict4);
        
        //5、获取字典的长度
        NSLog(@"%lu",dict4.count);
        
        //6、根据key值获取value值
        NSLog(@"%@",[dict4 objectForKey:@"zs"]);
        
        //7、字典遍历问题
        //快速枚举法(增强for,输入forin即可)
        for (NSString *str in dict4) {
            NSLog(@"%@=%@",str,[dict4 objectForKey:str]);
        }

        //使用block的方式进行遍历
        [dict4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
            NSLog(@"%@-->%@",key,obj);
        }];
    }
    return 0;
}

2、NSDictionary的简写及文件操作

//1)用简写的形式定义一个字典
NSDictionary *dict =@{@"zbz":@"zhangbozhi",@"cgx":@"chenguanxi",@"cjk":@"canlaoshi"};
//2)用简写的形式获取key对应的value
NSLog(@"%@",dict[@"cgx"]);
    
//3)把字典保存到文件中/Users/Linhan/Desktop/
BOOL isWrite= [dict writeToFile:@"/Users/Linhan/Desktop/dict.plist" atomically:YES];
if (isWrite) {
        NSLog(@"写入成功");
} else {
        NSLog(@"写入失败");
}
//4)从文件中读取字典
NSDictionary *readDict=[NSDictionary dictionaryWithContentsOfFile:@"/Users/Linhan/Desktop/dict.plist"];
NSLog(@"%@",readDict);

void test(){
//读取dict.plist文件
NSDictionary *readCitys=[NSDictionary dictionaryWithContentsOfFile:@"/Users/Linhan/Desktop/dict.plist"];
//遍历字典
[readCitys enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
for (NSString *str in obj) {
NSLog(@"city=%@",str);
}
}];
//获取某个数组
NSArray *arr=readCitys[@"hebei"];
NSLog(@"hebei=%@",arr);
NSLog(@"city=%@",[arr firstObject]);
}

3、可用于省市县联动

void shengshiliandong(){
//省  市  县
   
    //创建数组接收省的数组元素
//    NSArray *hebeiarr=[NSArray arrayWithObjects:@"baoding",@"shijiazhuang", nil];
//    NSArray *fujianarr=[NSArray arrayWithObjects:@"putian",@"quanzhou", nil];
    //创建数组接收市的数组元素
    NSArray *baoding=[NSArray arrayWithObjects:@"mancheng",@"quyang", nil];
    //创建字典接收省的数组元素
     NSDictionary *hebeisheng=[NSDictionary dictionaryWithObjectsAndKeys:baoding,@"baodingshi",@"shijiazhuang",@"shijiazhuang", nil];
    NSDictionary *fujiansheng=[NSDictionary dictionaryWithObjectsAndKeys:@"putianshi",@"putian",@"quanzhoushi",@"quanzhou",nil];
 
    //创建字典接收
    NSDictionary *citys=[NSDictionary dictionaryWithObjectsAndKeys:hebeisheng,@"hebei",fujiansheng,@"fujian", nil];
    
    [citys enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSLog(@"%@=%@",key,obj);
    }];
    //写入文件
    [citys writeToFile:@"/Users/Linhan/Desktop/dict.plist" atomically:YES];
    [citys enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSLog(@"%@-->%@",key,obj);
    }];
}

可变字典(NSMutableDictionary)

NSMutableDictionary是NSDictionary的子类

NSDictionary是不可变的,一旦初始化完毕后,它里面的内容就永远是固定的,不能删除里面的元素,也不能再往里面添加元素

NSMutableDictionary是可变的,随时可以往里面添加/更改/删除元素

NSMutableDictionary的使用方法

#import 

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

        //1)可变字典的创建
        NSMutableDictionary *dict1=[NSMutableDictionary dictionary];
        NSMutableDictionary *dict2=[NSMutableDictionary dictionaryWithCapacity:5];
        //简化创建,会有警告,不影响运行,适合NSDictionary
        NSMutableDictionary *dict3=@{@"zs":@"zhangsan",@"li":@"lisi",@"ww":@"wangwu"};
        
        //2)给可变字典添加键值对
        [dict1 setObject:@"zhangsan" forKey:@"zs"];//因为key值重复了,所以添加不上
        [dict1 setObject:@"zhaosi" forKey:@"zs"];
        [dict1 setObject:@"wangwu" forKey:@"ww"];
        
        //3)删除
//        [dict1 removeObjectForKey:@"ww"];
//        [dict1 removeAllObjects];
//        NSLog(@"%@",dict1);
        
        //4)修改
        [dict1 setObject:@"fengjie" forKey:@"zs"];
        //简化修改
        dict1[@"ww"]=@"chenguanxi";
        NSLog(@"%@",dict1);
        
        //5)查找
        NSArray *allKey=[dict1 allKeys];
        if([allKey containsObject:@"ww"]){
            NSLog(@"存在ww的key,其value为%@",dict1[@"ww"]);
        }
    }
    return 0;
}

结构体(NSRange)

NSRange是Foundation框架中比较常用的结构体

NSRange用来表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围

NSRange有2个成员

NSUInteger location : 表示该范围的起始位置

NSUInteger length : 表示该范围内的长度

结构体的用法

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

        NSRange range;//结构体变量
//        NSRange *r;//结构体指针
        
        //1)通过结构体成员变量赋值
        range.location=1;
        range.length=4;
        //2)定义的时候赋值
        NSRange range2={2,4};
        
        //3)强制类型转换
        range=(NSRange){3,5};
        
        //4)OC中新增的:创建结构体变量并赋值
        NSRange range4=NSMakeRange(4, 4);
        
        //查看结构体成员变量的值
//        NSLog(@"%lu,%lu",range4.location,range4.length);
        //以字符串的方式查看结构体成员变量的值
        NSLog(@"%@",NSStringFromRange(range4));

    }
    return 0;
}

你可能感兴趣的:(itheima)