------
Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
NSRange的创建:
NSMultableString:可变字符串
字符串的创建
一、基础知识
Foundation-基础框架.框架包含了开发中常用的数据机构,如结构体,枚举等,是其他ios框架的基础,如果要想使用foundation框架中的数据类型,那么只要您包含头文件及可以。
即#import <Foundation/Foundation.h>
二、常用的结构体介绍及简单使用
Foundation框架中的常用的结构体
NSRange(location length) 表示范围
NSPoint\CGPoint 表示坐标点
NSSize\CGSize 表示图标大小
NSRect\CGRect 表示图标位置及大小
三、NSRange
NSRange的参数:location 、lengthNSRange的创建:
NSRange的应用://NSRange的创建方式 NSRange r1 = {2, 4}; // 可读性不好 NSRange r2 = {.length = 4,.location = 2}; // 赋值不受参数顺序的限制,代码太多,繁琐 //以上两种方式在开发中不常用 //一般NSRange的创建应用系统自带的函数NSMakeRange/NSMakeRange NSRange r3 = NSMakeRange(2, 4); // 开发中常用 NSRange r4 = NSRangeMake(2, 2);
void range() { NSRange r1 = {2, 4}; NSRange r2 = {.length = 4, .location = 2}; NSRange r3 = NSRangeMake(2, 4); NSRange r4 = NSMakeRange(2, 4); //这四种创建方式结果一样 NSString *str = @"I am a student"; //要求查找"am"在str字符串中的位置 NSRange range = [str rangeOfString:@"am"]; //返回{2, 2} NSRange range1 = [str rangeOfString:@"good"]; //返回{-1, 0} NSLog(@"字符串\"am\"在字符串%@中的位置:%d,长度为:%d", str, range.location, range.length); NSLog(@"字符串\"goog\"在字符串%@中的位置:%d,长度为:%d", str, range1.location, range1.length); }
四、NSPoint\CGPoint(开发中常用CGPoint,因为这个是跨平台的)
NSPoint\CGPoint:表示点坐标,参数x、yvoid point() { CGPoint p1 = NSMakePoint(10, 10); CGPoint p2 = NSPointMake(10, 10); //CGPointZero == NSPointMake(0,0); //坐标原点 //将结构体转为字符串 NSString *str = NSStringFromPoint(p1); NSLog(@"%@", str); //将p1中的值一次性全部输出 //比较两个点是否相等 BOOL p = CGPointEqualToPoint(p1, p2); //返回YES BOOL pp = CGPointEqualToPoint(NSMakePoint(2,3), NSMakePoint(3, 4));// 返回NO }
五、NSSize\CGSize:表示元素宽高,参数width、height
void size() { NSSize s1 = NSSizeMake(10, 3); // 创建宽为10,高为3的矩形 NSSize s2 = NSSizeMake(30, 2); //NSSizeZoro == NSSizeMake(0,0); 元素的宽高为0 NSString *str2 = NSStringFromSize(s1); NSLog(@"%@", str); BOOL p = CGSizeEqualToSize(s1, s2); //返回YES BOOL pp = CGSizeEqualToSize(NSMakeSize(3,4), NSMakeSize(3, 4));// 返回YES }
六、NSRect\CGRect:表示元素的具体位置和大小,参数x,y,width,height
void size() { NSPoint p1 = NSMakePoint(2,3); NSPoint p2 = NSMakePoint(11,4); NSSize s1 = NSSizeMake(10, 3); NSRect re = NSRectMake(p1, s1); //以点p1为左上角点,向右宽度为10,向下高度为3的范围 NSRect re2 = {{2, 3},{10, 3}}; BOOL c = CGContentsPoint(re, p2);// 返回YES }
七、NSString、NSMultableString
OC中常用的系统类:
NSString、子类NSMultableString,NSArray、子类NSMultableString,NSSet、子类NSMultableSet,NSDictionary、子类NSMultableDictionary,NSObject
NSString:不可变字符串NSMultableString:可变字符串
字符串的创建
void creatString() { NSString *str = @"zsling"; //快速创建字符串,经常使用 NSString *str2 = [[NSString alloc] initWithString:@"zsling"];//不常使用 NSString *str3 = [[NSString alloc] initWithFormat:@"zsling's age is %d", 20];// 字符串拼接 NSString *str4 = [[NSString alloc] initWithUTF8String:"zsling"];// C语言字符串 char *s = [str4 UTF8String]; //将OC字符串转为C语言字符串 //读取文件,将文件内容保存到字符串中 NSString *str5 = [[NSString alloc] initWithContentsOfFile:@"/user/apple/Desktop/abc.txt" encoding:NSUTF8StringEncoding Error:nil]; //再将此字符串写入一个新的文件中 [str5 writeToFile:@"/user/apple/Desktop/aa.txt" atomically:YES encoding:NSUTF8StringEncoding Error:nil]; //取出URL路径中的文件内容 NSURL *url = [[NSURL alloc] initWithString:@"file:///user/apple/Desktop/abc.txt" encoding:NSUTF8StringEncoding Error:nil]; NSString *str6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding Error:nil]; //将字符串写到URL的文件中 NSURL *url2 = [NSURL fileURLWithPath:@"/user/apple/Desktop/aa.txt"]; [str6 writeToURL:url2 atomically:YES encoding:NSUTF8StringEncoding Error:nil]; } void createMultableString() { NSMultableString *str = [NSMultableString stringWithFormat:@"age is 10"]; [str appendString:@"11,12"]; //给字符串追加"11,12"字符串,返回的是str本身 NSRange range = [str rangeOfString:@"is"]; //{4,2} [str deleteCharactersInRange: range]; //删除字符串 //NSString类字符串的添加删除 NSString *str2 = [NSString stringWithFormat:@"age is 10"]; NSString *str3 = [str2 stringByAppendingString:"11, 12"]; //新创建一个字符串,并将str2+"11, 12"赋值给str3 }
八、NSArray、NSMultableArray
OC数组:只能存放OC对象,不能存放非OC对象。且数组不能存放nil值。void creatArray() { NSArray *array = [NSArray array]; //这个数组永远是空数组 NSArray *array2 = [NSArray arrayWithObject:@"zsling"]; //有一个元素的数组 NSArray *array3 = [NSArray arrayWithObjects:@"zsling", @"jack", @"rose", nil];// 多个元素的数组,nil是数组元素的结束标记 NSLog(@"%ld", [array3 count]); //返回array3中元素的个数 NSLog(@"%@", [array3 objectAtIndex:1]; //返回jack NSLog(@"%@", array3[2]); //编译器特性,返回rose NSArray *array4 = @[@"zsling", @"jack", @"rose"]; //快速创建一个NSArray对象 } 遍历数组 void searchArray() { NSArray *array = @[@"zsling", @"jack", @"rose"]; /*第一种遍历 for ( int i = 0; i<array.count; i++) { NSLog(@"%@", array[i]); } */ /*第二种遍历 for ( id obj in array ) { NSUIntor i = [array indexOfObject:obj]; //返回当前正在遍历的元素的位置 NSLog(@"%ld--%@", i, obj); } */ //第三种遍历 [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"%ld--%@", idx, obj);//每遍历到一个元素,就调用一次block,且当前元素和索引位置当成参数传递给block }] } void createMultableArray() { NSMultableArray *array = [NSMultableArray array]; NSMultableArray *array2 = [NSMultableArray arrayWithObjects:@"zsling", @"rose", @"jack", nil]; [array addObject:@"jake"]; [array removeObject:@"rose"]; [array removeObjectAtIndex:3]; //[array addObject:nil];错误写法 }
九、NSSet、NSMultableSet (没有顺序)
NSSet与NSArray:void creatSet() { NSSet *set = [NSSet set]; NSSet *set2 = [NSSet setWithObjects:@"jack", @"rose", nil]; NSString *str = [ser2 anyObject];//随机拿个元素 NSLog(@"%@", str); } void creatMultableSet() { NSMultableSet *set = [NSMultableSet set]; [s addObject:@"jack"]; [s removeObject:@"jack"]; }
共同点:
*都是集合,都能存放多个OC对象;
*只能存放OC对象,不能存放非OC对象(基本数据类型);
*本身都不可变,都有一个可变的子类
不同点:
*NSArray有序,NSSet无序
十、NSDictionary、NSMultableDictionary
NSDictionaryaa键值对,字典不允许有相同的key
void creatDictionary() { NSDictionary *dc = [NSDictionary dictionary]; NSDictionary *dc1 = [NSDictionary dictionaryWithObjects:@"jack" forkeys:@"name"]; NSDictionary *dc2 = @{@"name":@"jake", @"age":@"10", @"phone":@"123"}; id obj = [dc objectForKey:@"name"]; id obj2 = dc[@"name"]; } void creatMultableDictionary() { NSMultableDictionary *dc = [NSMultableDictionary dictionary]; [dc setObject:@"jack" forKey:@"name"]; [dc setObject:@"beijing" forKey:@"address"]; [dc removeObjectForKey:@"name"]; NSString *str = dc[@"address"]; NSLog(@"%@", dict); //遍历 [dc enumerateKeyAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@--%@",key, obj); }] }
十一、NSNumber:
void createNumber() { int age = 20; NSNumber *num = [NSNumber numberWithInt:age]; // 把基本数据类型封装成对象类型 NSNumber *num2 = [NSNumber numberWithDouble:15.5]; int no = [num intValue]; // 把对象类型转成基本数据类型 double d = [num2 doubleValue]; NSString *str = [NSString stringWithFormat:@"%d", 20]; // 把字符串类型转成基本数据类型 int a = [str intValue]; CGPoint p = CGPoint(10, 10); // 结构体包装成对象 NSValue *value = [NSValue valueWithPoint:p]; CGPoint p1 = [value pointValue]; // 将value转为对应的结构体 @30 @YES // YES是常量1 @NO @'a' // 'a'是一个数字 int age = 20; @(age); //@age //不加括号,编译器会认为@age是关键字,但又没有这个关键字,所以会报错 }
十二、NSDate
void createDate() { NSDate *date = [NSDate date]; // // 创建时间对象,NSDate是当前格林治时间 NSTimeInterval seconds = [date2 timeIntervalSince1980]; // 从1980年开始到date2走过的秒数 NSTimeInerval seconds2 = [date2 timeIntervalSinceNow]; // date2和现在的时间相差多少秒 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 日期格式化类 formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; // y年M月d日 H(24)时h(12)时: m分: s秒 NSString *str = [formatter stringFromDate:date]; NSString *time = @"2014/11/11 12:00"; // 字符串日期转为NSDate }
十三、NSValue
void creatValue() { CGPoint p = CGPointMake(2, 2); // 将结构体转为OC对象 NSValue *value = [NSValue valueWithPoint:p]; // 将结构体转为Value对象 // [value pointValue]; // 将value转为对应的结构体 NSArray *array = @[value ]; }