Objective-C实训(四)

练习与示例:

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 — — 集合)。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,601评论 18 139
  • 《裕语言》速成开发手册3.0 官方用户交流:iApp开发交流(1) 239547050iApp开发交流(2) 10...
    叶染柒丶阅读 26,021评论 5 19
  • 你是否遇到身边的人问古筝好学? 我想学日语,这个好学吗? 我想练瑜伽,这个困难吗? 我想考驾照,这个...
    宋明媚阅读 302评论 13 7
  • 第一篇来写写我的父亲,2010年1月12号,农历二零零九年十一月二十八下午三点父亲永远的离开了!时隔今日已经五年有...
    默然的妮阅读 345评论 1 3
  • 第一集 今天我到银行ATM取钱,我认识的老李和他老婆也来取钱,只听他老婆对他说:“我要输密码了,你站开些!”...
    柒皮橙阅读 465评论 0 0