美文网首页
Objective-C实训(四)

Objective-C实训(四)

作者: 无厘小阿先_ | 来源:发表于2017-08-21 16:26 被阅读0次

    练习与示例:

    1.数组相关概念

    数组:OC中的数组只能存储对象类型,不能存数int,float这些基本类型
    不可变数组:不能改变元素个数
    

    2.创建一个不可变数组

        NSArray *array = [[NSArray alloc]initWithObjects:@"温强", @"额尔敦", @"mc海杰", nil];
        NSArray *array1 = [[NSArray alloc]initWithObjects:@"1", @"2", @"3", nil];
        NSArray *array2 = @[@"a", @"b", @"c"];
    

    3.数组元素个数

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

    4.从数组取出索引位置的对象

        NSLog(@"%@", [array1 objectAtIndex:0]);
    
       //字面量形式,与上面方法等价
        NSLog(@"array中索引值为0处的元素:%@", array2[0]);
        if ([array containsObject:@"mc海杰"]) {
                NSLog(@"包含");
            } else {
                NSLog(@"不包含");
            }
    

    5.根据对象取索引值

        NSLog(@"%ld", [array indexOfObject:@"mc海杰"]);
    

    6.将一个字符串分割

        NSString *string = @"自己手动写一个域名";
        NSArray *resultArr = [string componentsSeparatedByString:@"."];
        NSLog(@"%@", resultArr);
    

    7.将数组中的字符串合并

        NSArray *arr = @[@"北京", @"大连", @"上海", @"南京"];
        NSString *resultStr = [arr componentsJoinedByString:@" "];
        NSLog(@"%@", resultStr);
    

    8.存在如下的字符串,将其中的图片的网址提取出来

        NSString *str = @"一个网址.jpg";
        NSArray *result = [str componentsSeparatedByString:@"&"];
        NSLog(@"%@", result);
    

    9.有如下一个数组,@[@“type = iOS", @"Device = iPhone", @"count = 随便输入一个网址", @"password = 12345”],将其中的内容用”&"符号拼接成一个字符串

        NSArray *array3 = @[@"type = iOS", @"Device = iPhone", @"count = 随便输入一个网址", @"password = 12345"];
        NSString *arrayr = [array3 componentsJoinedByString:@"&"];
        NSLog(@"%@",arrayr);
    

    10.可变数组

        NSMutableArray *mutableArray = [NSMutableArray arrayWithObjects:@"温强", @"额尔敦", nil];
    
        //字面量创建方式(不可变数组拷贝一份可变的副本)
        NSMutableArray *mutableArray1 = [@[@"温强", @"额尔敦"]mutableCopy];
    
        //由一个已知的数组创建另一个数组
        NSMutableArray *mutableArray2 = [NSMutableArray arrayWithArray:mutableArray];
    
        //添加一个元素(在数组的末未添加)
        [mutableArray addObject:@"额尔敦"];
        NSLog(@"%@", mutableArray);
    
        //插入一个元素
        [mutableArray insertObject:@"苏乐" atIndex:1];
        NSLog(@"%@", mutableArray);
    
        //移除一个对象(根据内存地址判定)
        [mutableArray1 removeObject:@"额尔敦"];
        NSLog(@"%@", mutableArray1);
    
        [mutableArray2 removeLastObject];
    
        //通过索引位置移除
        [mutableArray1 removeObjectAtIndex:0];
    
       //清空数组
       [mutableArray1 removeAllObjects];
    
       //修改某索引处的元素内容
       mutableArray1[0] = @"张三";
       NSLog(@"%@",mutableArray1);
    

    11.向数组中添加三个名字;
    从数组中查找指定的名字,并且用另一个名字替换改名字;
    删除指定名字。

        NSMutableArray *arrayl = [NSMutableArray arrayWithObjects:@"张三", nil];
         [arrayl addObject:@"李四"];
         [arrayl addObject:@"王五"];
         [arrayl addObject:@"赵六"];
         if ([arrayl containsObject:@"赵六"]) {
              NSInteger index = [arrayl indexOfObject:@"赵六"];
              [arrayl replaceObjectAtIndex:index withObject:@"小刘子"];
              NSLog(@"%@",arrayl);
         }
         [arrayl removeObject:@"张三"];
         NSLog(@"%@",arrayl);
    

    12.创建一个字典(key和value要求都是对象类型,key通常都是字符串,且key是唯一的,不允许出现两个相同的key)

         NSMutableDictionary *mutableDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"温强", @"name", @"99", @"age", nil];
         NSString *name = [mutableDictionary objectForKey:@"name"];
         //字典取值(字面量写法)
         NSString *name1 = mutableDictionary[@"name"];
         NSLog(@"%@",name);
         NSLog(@"%@",name1);
            
         NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
         NSArray *array4 = @[@"温强", @"额尔敦", @"mc海杰"];
         for (NSString *key in array4) {
               NSString *name = [dictionary objectForKey:key];
               NSLog(@"%@",key);
               NSLog(@"%@",name);
         }
    

    作业:

    实现图书管理系统:
    1、定义书籍Book类,含有属性name,price,author
    2、使用数组管理所有书籍对象。
    3、管理系统含有1.添加书籍、2.查找书籍(根据书名查找)
    4、用户根据控制台提示选择功能:
    输入1开始添加书籍,然后根据控制台提示依次输入书名,价格和作者,生成新的book对象,添加到数组中,控制台提示用户添加成功;
    输入2提示用户输入要查找的书籍名称,然后控制台打印该书籍的名称,价格,作者信息;
    提示:由c语言字符串生成一个OC字符串对象方法:
    char name[50];
    printf("请输入名称:");
    scanf("%s", name);
    NSString *nameStr = [NSString stringWithUTF8String:name];

    • 新建一个Book类,在.h中新建用到的属性:
    @property (nonatomic, retain) NSString *name;
    @property (nonatomic, assign) CGFloat price;
    //@property (nonatomic, retain) NSString *price;
    @property (nonatomic, retain) NSString *author;
    
    • 在主函数中导入头文件:
    #import "Book.h"
    
    • 在主函数中实现:
        //创建一个空数组
        NSMutableArray *bookArray = [NSMutableArray array];
        //遍历五本书
        for (int i = 0; i < 5; i++) {
             Book *book = [[Book alloc]init];
             book.name = [NSString stringWithFormat:@"book%d", i];
             book.price = i * 10;
             book.author = [NSString stringWithFormat:@"author%d", i];
             //把五本书装在数组中
             [bookArray addObject:book];
         }
            
         //回到功能选择页面
         while (YES) {
             NSLog(@"1.添加书籍:\n2.查找书籍:\n");
             printf("请输入数字选择功能:");
             int caseNumber = 0;
             scanf("%d",&caseNumber);
                
         switch (caseNumber) {
             case 1:
             {
                 //char型数据接收
                 char name[50];
                 CGFloat price;
                 char author[50];
                 printf("请输入书籍名称:");
                 scanf("%s",name);
                 printf("请输入书籍价格:");
                 scanf("%lf",&price);
                 printf("请输入书籍作者:");
                 scanf("%s",author);
                        
                 Book *book = [[Book alloc]init];
                 book.name = [NSString stringWithUTF8String:name];
                 book.price = price;
                 book.author = [NSString stringWithUTF8String:author];
                 [bookArray addObject:book];
                 NSLog(@"添加成功");
                }
              break;
                        
              case 2:
              {
                 char name[50];
                 printf("请输入要查找的书籍名称:");
                 scanf("%s", name);
                 NSString *searchName = [NSString stringWithUTF8String:name];
                 BOOL flag = YES;
                 for (int i = 0; i < bookArray.count; i++) {
                      Book *book = bookArray[i];//拿到book
                      if ([book.name isEqualToString:searchName]) {
                             NSLog(@"书籍的名称是:%@,书籍的价格是:%f,书籍的作者是:%@",book.name,book.price,book.author);
                             flag = NO;
                      }
                 }
                 if (flag) {
                      NSLog(@"没有搜索到结果");
                 }
    
             }
             break;
                        
             default:
             break;
             }          
    }
    

    知识点:

    1.使用苹果帮助文档

    1️⃣帮助文档的作用:帮助开发者快速了解系统类的功能。
    2️⃣学会使用苹果帮助文档是开发者的一项技能。
    3️⃣文档基本信息:
      Inherits from 继承关系 。
      Conforms to 遵循什么协议。
      Framework 属于哪个框架。
      Availability 什么时候可用的。
      Declared in 声明在什么头文件里。
      Related documents 相关文档。
      Sample code 示例代码。
    
    //快速打开帮助文档
    在代码中,将鼠标停留在 类名或者方法名上,option+鼠标左键,点击Reference的超链接进入帮助文档。
    也可使用command+鼠标左键,进入头文件,查看类的接口部分。
    

    2.API与头文件的区别

    1️⃣苹果帮助文档(API)中详细的介绍了方法的作用以及如何使用。
    2️⃣头文件内只是简略的显示方法。
    3️⃣当我们想详细的了解某一个类的功能的时候,使用苹果帮助文档(API)。
    4️⃣当我们忘记某一个属性或者方法名的写法的时候,可以进入头文件进行快速查看。
    

    3.字符串-NSString

    C语言中,字符串是由char(ASCII码)字符组成。
    OC中,字符串是由unichar(Unicode)字符组成。
    NSString:不可变字符串,即:创建以后,内容和长度不能更改。
    NSMutableString:可变字符串,即:创建以后,内容还可以修改。
    

    4.字符串创建

    初始化方法:
       NSString *string = [[NSString alloc] initWithFormat:@"I love iOS!"];
       format —— 格式串(使用方式与C语言格式化输出函数printf相似)
    便利构造器:
       NSString *string = [NSString stringWithFormat:@"I love iOS!"];
    

    5.NSMutableString

    NSMutableString是NSString 类的子类。
    NSMutableString创建的字符串是一个动态的可变的字符串,可以对原字符串对象进行增、删、改等操作。
    

    6.可变、不可变区别

    不可变字符串 —— 本身不能被修改。
    对不可变字符串的修改操作,操作的是原字符串的副本,得到的是一个新的字符串。
    可变字符串 —— 本身能被修改。
    可变字符串修改的是原字符串,因此可变字符串的操作方法     没有返回值!!!
    

    7.NSNumber

    数值类。
    作用:实现 基本数据类型与OC对象类型的相互转化。
    基本数据类型(int,float等)转换为NSNumber。
    NSNumber转换为基本数据类型(int,float等)。
    

    8.NSNumber字面量

    常量:
    NSNumber *intNumber = @38;
    NSNumber *charNumber = @‘w';
    
    变量:
    int age = 18;
    NSNumber *ageNumber = @(age);
    
    char gender = 'w';
    NSNumber *genderNumber = @(gender);
    

    9.NSValue

    完成结构体和对象类型 的互转。
    结构体(NSRange等)转换为NSValue。
    NSValue转换为结构体(NSRange等)。
    

    10.总结

    1.可变对象通常是不可变对象的子类,包含父类所有方法,并且具有对原有对象的增、删、改功能。
    注:不可变字符串的修改方法有返回值。
    可变字符串的修改方法没有返回值。
    
    2.可变对象的增、删、改都是对自身对象的操作。不可变对象的增、删、改都会生成新的对象,原对象不变。
    
    3.NSNumber、NSValue主要是为了完成基本数据类型,结构体和对象的互转,便于与collection配合使用(collection — — 集合)。
    

    相关文章

      网友评论

          本文标题:Objective-C实训(四)

          本文链接:https://www.haomeiwen.com/subject/efxhdxtx.html