OC进阶(四)

1.协议的补充

#import <Foundation/Foundation.h>
//#import "baseProtocol.h"
@protocol baseProtocol;//只是告诉编译器有这个协议

@interface Dog : NSObject<baseProtocol>

@end

2.NSString的比较

#import <Foundation/Foundation.h>
void test(){

    NSString *str1 = @"abc";   // a 97
    NSString *str2 = @"abc";   // A 65
    
    //取出每个字符的ASCII码值 ,比较ASCII码值大小
    //compare方法比较大小
    //compare 默认的区分大小写的
    //compare 这个函数,不能增加条件
    //        NSComparisonResult result = [str1 compare:str2];
    
    //比较的时候,不区分大小写,参考字符的个数
    NSComparisonResult result = [str1 compare:str2 options:NSCaseInsensitiveSearch|NSNumericSearch];
    //
    switch (result) {
        case NSOrderedAscending:
            NSLog(@"str1 < str2 升序");
            break;
            
        case NSOrderedDescending:
            NSLog(@"str1 > str2 降序");
            break;
            
        case NSOrderedSame:
            NSLog(@"str1 == str2 ");
            break;
            
        default:
            break;
    }


}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        NSString *str1 = @"abc";   // a 97
        NSString *str2 = @"abc";   // A 65
        NSString *str3 = [NSString stringWithFormat:@"Abc"];
        
        //地址的比较
        // "==" 不能够判断字符串是否相等的
        
        //判断字符串内容真正是否相等,使用是
        //isEqualToString:
        //注意:他是区分大小写的
        
        if ([str1 isEqualToString:str3]) {
            NSLog(@"相等");
        }else{
        
         NSLog(@"不相等");
        }
        
    }
    return 0;
}

3.NSString的前后缀检查和搜索

#import <Foundation/Foundation.h>
/*
  检测字符串的前缀和后缀
 */
void test(){

    NSString *url = @"https://www.baidu.com";
    
    //如何检测这个字符串是否是一个网址
    //http://    https://
    // 检测一个字符串的前缀是否以 http://  开头  或者 https:// 开头
    // [str hasPrefix:@"要检测的内容"];
    
    if([url hasPrefix:@"http://"]||[url hasPrefix:@"https://"]){
        
        NSLog(@"是一个网址");
    }else{
        
        NSLog(@"这不是一个网址");
    }
    
    //检测字符串的后缀
    // xxxx.jpg    判断 字符串的后缀是否是".jpg"
    // xxxx.png
    // xxxx.jpeg
    // xxxx.gif
    NSString *imgName = @"xxxxx.doc";
    // [str hasSuffix:@"带检测的后缀"]
    if([imgName hasSuffix:@".jpg"]||[imgName hasSuffix:@".png"]||[imgName hasSuffix:@".jpeg"]||[imgName hasSuffix:@".gif"]){
        
        NSLog(@"是一个图片");
    }else{
        
        NSLog(@"这不是一个图片");
    }


}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
       
        //字符串的查找
        // 查找某个字符串在另外一个字符串中首次出现的位置
        //     0123456789
        //1  @"asdaiosffsdafiosasdfsffitcastasdfasd"
        //2  @"ios"
        //   4   3
        
        //  1 rangOfString 2
        NSString *str1 =@"asdaiosffsdafiosasdfsffitcastasdfasd";
        NSString *str2 =@"cjk";
        // 字符串查找
        // 查找2 在 1中首次出现的位置
        // 如果查找到了,返回2在1中的位置和长度
        // 如果查找不到,返回的信息:
        //            location   特别大的数(NSNotFound) 最大的long类型的数
        //            length     0
        // range 结构体变量  NSRange 结构别名
       NSRange range =  [str1 rangeOfString:str2];
        
        //判断是否查找到了
        if(range.location!=NSNotFound){
        //range.location 表示字符串首次出现的位置
        //range.length 字符串出现的长度(实质上就是子字符串的长度)
        NSLog(@"%lu,%lu",range.location,range.length);
        }else{
        
            NSLog(@"在%@中没有找到这个字符串%@",str1,str2);
        }
        
    }
    return 0;
}

4.NSRange的使用

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
       
        NSRange range;  //range 结构体变量
        NSRange *r ;    // r 结构体指针
        
        //range变量的初始化方式
        //1) 通过结构体变量访问成员
        range.location = 3;
        range.length = 2;
        
        //2) 结构体变量整体赋值
        range = (NSRange){5,3};
        NSRange r2 = {4,5};  //最简单的
        
        //3)
        NSRange r3 = {.location = 3};  //只是给结构体变量中的.location 成员赋值
        
        //4) OC中新增的
        //NSMakeRange函数的作用给 NSRange结构体变量赋值
        NSRange r4 = NSMakeRange(3, 3);
        
        //查看结构体变量的值
        NSLog(@"%ld,%ld",r4.location,r4.length);
        //可以把结构体变量转换为 NSString类型
        NSLog(@"%@",NSStringFromRange(r4));
        
        
    }
    return 0;
}

5.字符串的截取和替换

#import <Foundation/Foundation.h>
void test(){

    //                01234567890
    NSString *str = @"http://www.baidu.com";
    
    //1) 从xx位置开始,到最后结束(包含xx这个位置的字符)
    NSString *str1 = [str substringFromIndex:5];//从第5个之后
    NSLog(@"str1 = %@",str1);
    
    
    //2) 从开始位置,到xx位置结束(不包含xx这个位置)
    NSString *str2 = [str substringToIndex:5];
    NSLog(@"str2 = %@",str2);
    
    
    //3) 截取一个范围 range
    NSRange r1 = {3,4};
    NSString *str3 = [str substringWithRange:r1];
    NSLog(@"str3 = %@",str3);

}
/*
 
  字符串截取的练习
 */
void test2(){


 
    NSString *str = @"<iosios>wwoshizifuchuan</iosios>";
    //  @">"  loc+1
    NSUInteger loc = [str rangeOfString:@">"].location + 1;  //"w"得位置
    //  @"</" loc
    NSUInteger len = [str rangeOfString:@"</"].location - loc;  //要截取的字符的长度
    // 构建 ruange
    NSRange r2 = {loc,len};
    // 截取
    NSString *subStr = [str substringWithRange:r2];
    NSLog(@"subStr = %@",subStr);
}


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //字符串的替换
        // @"asdfsdafasdfdasdfsa"  ----> a 替换成 "*"
        // @" asdfasfd asdfsadf asdf asdfas asdf asdf asdfa"
        
        NSString *str =@"asdfsdafasdfdasdfsa";
        
//        str stringByReplacingOccurrencesOfString:@"源字符串中的内容" withString:@"要替换成新的内容"
        //把a替换成 *
        NSString *newStr = [str stringByReplacingOccurrencesOfString:@"a" withString:@"*"];
        NSLog(@"newStr = %@",newStr);
        
        // 把空格给去掉
        str =@" asdfasfd asdfsadf asdf asdfas asdf asdf asdfa";
        newStr = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
         NSLog(@"newStr = %@",newStr);
        
        //将http:**ios.ios.cn*ios*images*content_25.jpg中的*替换为/
        str =@"http:**ios.ios.cn*ios*images*content_25.jpg";
        newStr = [str stringByReplacingOccurrencesOfString:@"*" withString:@"/"];
                 NSLog(@"newStr = %@",newStr);
        
        //  http:**  ios.ios.cn  *ios*images*  content_25.jpg
        // 1) 空格 替换成空
        // 2) 把*替换成/
        
        str = @"http:**  ios.itcast.cn  *ios*images*  content_25.jpg";
        newStr = [str stringByReplacingOccurrencesOfString:@" " withString:@""];
        
        newStr = [newStr stringByReplacingOccurrencesOfString:@"*" withString:@"/"];
                    NSLog(@"newStr = %@",newStr);     
        
    }
    return 0;
}

6.NSString的其他用法

#import <Foundation/Foundation.h>
//字符串转各种数值
void test(){

    // str 是一个对象
    NSString *str = @"1";
    NSString *str2 = @"3.14";
    //基本数据类型
    int a = 10;
    
    //str @"1" ----> 1
    int b = [str intValue];   // @"1"  --> 1
    b = [str2 intValue];      // @"3.14" ---> 3
    
    a = a+b;  //a = 13
    
    
    //这是把str2转换为 float值
    float f1 = [str2 floatValue];  //@"3.14" --> 3.14f
    f1 = f1 + a;
    
    //把str2 转换为 double 值
    double d1  = [str2 doubleValue]; // @"3.14" --> 3.14
    //  3.14+ 3
    d1 = d1 + b;
    
    NSLog(@"a = %.2f",d1);
    
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        
        NSString *str = @"a";
        int value = [str intValue];
        NSLog(@"value = %d",value);
//        //OC的字符串和 C的字符串互相转换问题
//        // char*  NSString
//        //1) C---->OC对象
//        
//        char *s = "zhangsanfeng";
//        printf("%s\n",s);
//        
//        //思路:创建一个OC的字符串对象,用C语言的字符串创建
//        NSString *str = [NSString stringWithUTF8String:s];
//        NSLog(@"str = %@",str);
//        
//        //2) OC对象 --> C的字符串
//        NSString *str2 = @"zbz";
//        // 把str2 转 C的字符串
//        const char *s1 = [str2 UTF8String];
//        printf("s1 = %s\n",s1);
        
    }
    return 0;
}

7.NSMutableString 介绍和使用

 

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        
        //不可变: 字符串占用的 空间 和 字符串 的内容,都不能改变
        //可变: 字符串占用的空间和字符串的内容,都可以改变
        
        NSString *str = @"Jack";   //常量区
        NSLog(@"str addr =%p",str);
        
        str = @"Rose";
        NSLog(@"str addr =%p",str);
        
        //可变的字符串
        NSMutableString *str2 = [NSMutableString stringWithFormat:@"Jack"];
        NSLog(@"str2 addr =%p",str2);
        
        
        [str2 appendString:@"&Rose"];
        NSLog(@"str2 addr =%p",str2);
        
        NSLog(@"str2 = %@",str2);
        
        //思考:
        
        //创建一个可变的空字符
        NSMutableString *str3 = [NSMutableString string];
        NSLog(@"str3 = %@",str3);
        for (int i=0; i<10; i++) {
            [str3 appendString:@" ios"];
        }
        
        NSLog(@"str3 = %@",str3);
    }
    return 0;
}

8.可变字符串的常见的方法

#import <Foundation/Foundation.h>
//可变字符串的常见的方法
void test(){

    
    NSMutableString *str = [NSMutableString string];
    
    //1) appendFormat 格式化的添加字符串
    //                  0123456789
    [str appendFormat:@"http://www.baidu.com/%d",100];
    
    //str http://www.baidu.com/100
    NSLog(@"%@",str);
    
    //2) 删除字符串一部分内容
    [str deleteCharactersInRange:NSMakeRange(3, 4)];
    NSLog(@"%@",str);
    //3) 插入一个字符串
    [str insertString:@"p://" atIndex:3];
    NSLog(@"%@",str);
    
    //4) 替换字符串的一部分内容
    [str replaceCharactersInRange:NSMakeRange(11, 5) withString:@"ios"];
    NSLog(@"%@",str);
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //给可变的字符串赋值一个不可变的值
        //错误:
        // 1)给可变字符串赋值了不可变的值
        // NSMutableString   =  NSString
//        NSMutableString *str = @"abc";
//        [str appendString:@"xxxx"];
        
        NSMutableString *str = [NSMutableString stringWithFormat:@"abc"];
        
        // 2)
        //string 把原来字符串的内容给覆盖了
        str.string = @"";   //用空覆盖
        
        [str appendString:@"xxxxx"];
        
        NSLog(@"str = %@",str);
        
    }
    return 0;
}

9.NSArray

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //NSArray特点:
        // 一旦创建成功,内容不可改变
        // 只能存放OC对象
        
        //1)创建一个空数组
        NSArray *arr1 = [NSArray array];

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

        //3)创建数组,有多个元素
        // nil 表示数组赋值结束
        // 常见写法
        NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1, nil];
                        NSLog(@"arr3 = %@",arr3);
        //4)调用对象方法,创建数组
        //nil Nil NULL  NSNULL
        NSArray *arr4 = [[NSArray alloc] initWithObjects:@"three",[NSNull null],@"four", nil];
                        NSLog(@"arr4 = %@",arr4);
        //5)用一个数组可以创建另外一个数组
        NSArray *arr5 = [NSArray arrayWithArray:arr3];
                        NSLog(@"arr5 = %@",arr5);
        
 
    }
    return 0;
}

10.NSArray常见的方法

#import <Foundation/Foundation.h>
//数组的常见的方法
void test(){

    NSArray *arr3 = [NSArray arrayWithObjects:@"one",@"two",@1,@"three", nil];
    NSLog(@"arr3 = %@",arr3);
    
    //1)获取数组的长度  count获取数组的元素的个数
    NSLog(@"%ld",arr3.count);
    
    //2)根据下标,获取下标对应的对象
    NSLog(@"%@",[arr3 objectAtIndex:3]);
    
    //3)返回元素的下标
    NSUInteger loc = [arr3 indexOfObject:@"three"];
    NSLog(@"%ld",loc);
    
    //4)数组中是否包含了某个元素
    if([arr3 containsObject:@"four"]){
        
        NSLog(@"包含此元素");
        
    }else{
        
        NSLog(@"不包含");
    }
}
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //用简化的方式,来定义和访问数组元素
        //1)用简化的方式,定义数组
        //格式: @[ 数组元素 ]
        NSArray *arr = @[@"1",@"one",@"3",@4,@"ONE"];
        NSLog(@"arr = %@",arr);
        
        NSString *str =[arr objectAtIndex:2];
        NSLog(@"%@",str);
        
        //2)用简化的方式访问数组元素
        str = arr[1];   //C语言形式的数组元素访问
        NSLog(@"%@",str);
        
    }
    return 0;
}

11.NSArray的遍历方法

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //定义一个数组
        NSArray *arr = @[@"one",@"two",@"three",@"four"];
        
        //对数组进行遍历
        
        //1) 普通的方式,通过下标访问
        for (int i=0; i<arr.count; i++) {
            NSLog(@"-> %@",arr[i]);
        }
        
        //2) 快速枚举法 for循环的增强形式
        for (NSString * str in arr) {
             NSLog(@"---> %@",str);
        }
        

        //3) 使用block的方式,进行访问
        //                               数组元素            元素下标     是否停止
        //stop:YES  会停止, stop:NO 不会停止
        [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
            
            if(idx == 2){
            
                *stop = YES;  //停止  // break;
                
            }else{
            
               NSLog(@"idx = %ld,obj = %@",idx,obj);
            }
            
            
        }];
    }
    return 0;
}

12.NSMutableArray的使用

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //数组的使用
        //1)创建数组
         //i. 空数组
        NSMutableArray *arr1 = [NSMutableArray array];
        NSLog(@"%p",arr1);
        
         //ii.创建的时候初始化一个元素
        NSMutableArray *arr2 = [NSMutableArray arrayWithObject:@"one"];
        
         //iii.创建数组的时候,初始化多个元素
        NSMutableArray *arr3 = [NSMutableArray arrayWithObjects:@"one",@"two",@3,nil];
        
         //IV . 创建一个数组,并且指定长度,
        NSMutableArray *arr4 = [NSMutableArray arrayWithCapacity:5];
        
       
        
        //2) 添加元素
        [arr1 addObject:@"fengjie"];

         NSLog(@"%p",arr1);
        //插入元素到指定的位置
        [arr1 insertObject:@"zbz" atIndex:0];
        
        
        //3) 删除元素
        //根据对象内容删除
//        [arr1 removeObject:@"zbz"];
        //根据位置删除
//        [arr1 removeObjectAtIndex:1];
        //全部删除
        [arr1 removeAllObjects];
        
        
        
        //4) 修改元素
        //two --> four
        [arr3 replaceObjectAtIndex:1 withObject:@"four"];
        //four --> five
        //更加简单地方法
        arr3[1] = @"five";
        NSLog(@"%@",arr3);
        
        //5) 查找元素
        BOOL isSearch = [arr3 containsObject:@"four"];
        NSLog(@"%d",isSearch);
        
        //6) 交换元素
        // 1   2   3   4   5
        // 5   2   3   4   1
        //temp = a[0];
        //a[0] = a[len-1];
        //a[len-1] = temp;
        NSMutableArray *arr5 =[NSMutableArray arrayWithObjects:@1,@2,@3,@4,@5, nil];
        // 可以交换数组元素
        [arr5 exchangeObjectAtIndex:0 withObjectAtIndex:4];
        NSLog(@"%@",arr5);
        
        
        
    }
    return 0;
}

13.NSDictionary

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //NSDictionary 不可变的,一旦创建,内容就不能添加\删除(不能改动)
        //1)创建空字典
        NSDictionary *dict1 = [NSDictionary dictionary];
        // key    value
        // zs ---> 张三
        
        // ls ---> 李四
        // mz ---> 码子
        //2)创建只有一组键值对的字典
        NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"zhangsan" forKey:@"zs"];
        
        //3)创建多组键值对的字典
        // value值,key值
        NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"value1",@"k1",@"value2",@"k2", nil];
        
        //注意;
        // 字典的key值和value值,都必须是对象
        
        //4)快速创建一个字典
        //@{,,key值:value值,,,};
        //key值不能重复:
        //如果重复了,也不会报错
        //如果重复了,最后添加的将不能够保存到字典中
        
        NSDictionary *dict4 = @{@"zs":@"zhaosi",@"zs":@"zhangsan",@"ls":@"lisi",@"bz":@"banzhang"};
        
        NSLog(@"%@",dict4); //以%@格式打印字典,控制台输出一个{   }
        //5)获取字典的长度
        NSLog(@"%lu",dict4.count);
        //6)根据key值取出value值
        //      zs      zhaosi
        //                                   key
        NSString *str = [dict4 objectForKey:@"zs"];
        NSLog(@"str = %@",str);
        
        //7)字典的遍历问题
        //第一步:获取所有的key
        //第二步:根据key获取value
//        for(NSString *key in dict4){
//            NSLog(@"key = %@,value = %@",key,[dict4 objectForKey:key]);
//        }
        //                                           key     value       stop
        [dict4 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
            
            NSLog(@"%@ --> %@",key,obj);
            
        }];
        
        
        
    }
    return 0;
}

14.NSMutableDictionary

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //1)可变字典的创建
        NSMutableDictionary *dict1 = [NSMutableDictionary dictionary]; //创建空字典
        NSMutableDictionary *dict2 = [NSMutableDictionary dictionaryWithCapacity:3];

        //2)给可变字典添加键值对
        
        [dict1 setValue:@"zhaosi" forKey:@"ls"];//因为key值重复了,所以添加不上
        [dict1 setValue:@"lisi" forKey:@"ls"];  // ls
        
        [dict1 setValue:@"liuneng" forKey:@"ln"];
        NSLog(@"%@",dict1);
        
        //3)删除
//        [dict1 removeObjectForKey:@"ls"];
//        [dict1 removeAllObjects];
        NSLog(@"%@",dict1);
        //4)修改
        //
        [dict1 setObject:@"zhaosi" forKey:@"ls"];
        //简写形式
        dict1[@"ls"] = @"xxxxx";
         NSLog(@"%@",dict1);
        //5)查找
        //获取所有的key值
        NSArray *arr = [dict1 allKeys];
        if([arr containsObject:@"ls"]){
        
            NSLog(@"存在ls的key");
        }

    }
    return 0;
}

 

转载于:https://www.cnblogs.com/iosnds/p/4917824.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值