OC数据类型
我们在OC阶段通常叫数值类型。
oc的数值类型主要分为两种:typedef类型和对象类型;
以常用数据类型为例,C和OC数值类型的对比如下:
结构体类型 NSPoint…
我们先看看typedefy的结构体类型,他是复杂的数据类型,记住不是对象类型哦。
NSPoint point = NSMakePoint(10, 10);//声明初始化一个点
NSRect rect = NSMakeRect(0, 0, 100, 100);//矩形区域
NSSize size = NSMakeSize(100, 100);//尺寸
NSRange range = NSMakeRange(1, 2);//范围
NSValue
我们经常说oc我们只讲对象和类,在oc中我们参与操作的很多时候基本都是对象,但是如果我们的数据是基本数据类型或则复杂的数据类型,那我们怎么办呢—–使用封装。
在OC中我们可以使用NSValue(数值对象),主要用于复杂数据类型的对象化封装,当然也可以将简单数据类型封装为对象。这样我们就可以用他们操作了。
NSPoint point = NSMakePoint(10, 10);//声明初始化一个点
NSSize size = NSMakeSize(100, 100);//尺寸
//封装数据
NSValue *pointValue = [NSValue valueWithPoint:point];
NSLog(@"%@", pointValue);
NSValue *sizeValue = [NSValue valueWithSize:size];
NSLog(@"%@", sizeValue);
//解封装
NSPoint piont1 = [pointValue pointValue];
NSLog(@"%@",NSStringFromPoint(piont1));
NSSize size1 = [sizeValue sizeValue];
NSLog(@"%@",NSStringFromSize(size1));
NSNumber
数值对象,用于简单数据类型的对象化封装;
//封装基本数据
NSNumber *intNumber = [NSNumber numberWithInt:12356789];
NSLog(@"%@", intNumber);
NSNumber *floatNumber = [NSNumber numberWithFloat:10.5];
//解封装
int a = [intNumber intValue];
float b = [floatNumber floatValue];
//快速
NSNumber *fastNumber = @123;
NSLog(@"%@",fastNumber);
NSNumber简写:
[NSNumber numberWithChar:’X’] 可简写为 @’X’
[NSNumber numberWithInt:123] 可简写为 @123
[NSNumber numberWithBool:YES] 可简写为 @YES
补充:使用NSNumberFormatter对NSNumber与NSString转化
//NSNumberFormatter工具类
//第一步:创建一个格式转换器
NSNumberFormatter *formatter = [[NSNumberFormatter alloc]init];
//第二步:设置格式
[formatter setNumberStyle:NSNumberFormatterSpellOutStyle];
//转换数据
NSNumber *number = [NSNumber numberWithInt:12345678];
NSString *str1 = [formatter stringFromNumber:number];
NSLog(@"%@", str1);
使用NSNumberFormatter可以快速做出如下格式:
NSString
对于前面的我们只能算开胃菜,如果你要学数据类型,重点还是NSString.
- NSString是一个类,通过这个类实例化的对象为OC的字符串对象;
- NSString实例的运算(增、删、查、改等),全部通过方法进行,无法进行任何四则运算;
- 与C语言的char *类型字符串做一个对比:
NSString常用方法
1.各种初始化
//最简初始化方式
NSString *string1 = @"helli";
//常规初始化
NSString *string2 = [[NSString alloc] initWithString:string1];
NSString *string3 = [[NSString alloc] initWithFormat:@"huang%d%@",123, @"abc"];
//便利构造初始化
NSString *string4 = [NSString stringWithFormat:@"%d", 123456];
2.字符串拼接 stringByAppend… stringByAppendingFormat
//一般的字符串拼接方法
NSString *appendString1 = [string1 stringByAppendingString:string2];
NSLog(@"append = %@",appendString1);
//格式字符串的拼接方法
NSString *appendString2 = [string1 stringByAppendingFormat:@"%@",string2];
NSLog(@"append2 = %@",appendString2);
//初始化拼接
NSString *appendString3 = [NSString stringWithFormat:@"%@%@",string1,string2];
NSLog(@"append3 = %@",appendString3);
3.字符串截取 subString…
NSString *newString = [NSString stringWithFormat:@"helloworld"];
NSString *subString1 = [newString substringFromIndex:5];//[左闭右闭];
NSLog(@"subString1 = %@",subString1);
NSString *subString2 = [newString substringToIndex:5];//[左闭右开);
NSLog(@"subString2 = %@",subString2);
//low
NSRange range = {3,3};
NSString *subString3 = [newString substringWithRange:NSMakeRange(3, 3)];
NSLog(@"subString3 = %@",subString3);
4.字符串查询 rangeOfString
NSString *str1 = @"abcd123efg";
//查找“123”
NSRange range1 = [str1 rangeOfString:@"123"];
if (range1.length == 0 && range1.location == NSNotFound) {
NSLog(@"没有找到!");
} else {
NSLog(@"找到了!");
NSLog(@"range = %@",NSStringFromRange(range1));
}
5.字符串替换 stringByReplacing…
NSString *str2 = [str1 stringByReplacingOccurrencesOfString:@"123" withString:@"ABC"];
NSLog(@"%@", str2);
6.字符串比较 isEqualTo… compare
NSString *str3 = @"abc";
NSString *str4 = @"Abc";
BOOL isEqual = [str3 isEqualToString:str4];
if (isEqual) {
NSLog(@"相等");
} else {
NSLog(@"不想等");
}
*/
/*NSOrderedAscending = -1L,升序,小于
NSOrderedSame, 等于0
NSOrderedDescending 降序 大于1
*/
NSComparisonResult result = [str3 compare:str4];
if (result == NSOrderedAscending) {
NSLog(@"升序!");
} else if (result == NSOrderedSame) {
NSLog(@"相同!");
} else {
NSLog(@"降序!");
}
8.数值转换 integerValue…
NSString *str5 = @"123";
NSInteger a1 = [str5 integerValue];
NSString *str6 = [NSString stringWithFormat:@"%d", 123];
9.大小写转换 uppercaseString、lowercaseString、capitalizedString
NSString *str7 = @"hello,world.";
NSString *str8 = [str7 uppercaseString];
NSLog(@"%@", str8);
NSLog(@"%@", [str8 lowercaseString]);
NSLog(@"%@", [str7 capitalizedString]);//首字母大写
NSMutableString可变字符串处理
- NSString类型是不可变类型的字符串,OC中有专门的可变类型字符串NSMutableString;
- NSMutableString继承自NSString,所以他可以直接使用NSString的方法,即可以直接作为不可变字符串使用;
- 几乎所有NSString的运算方法,都同时对应着其可变类型的算法。
- 一般NSString类型运算都是通过返回值给定一个新NSString对象,而NSMutableString的运算是直接改变原有字符串,所以返回值多为void.
NSMutableString *mstr1 = [[NSMutableString alloc] initWithFormat:@"%d", 123];
//便利构造初始化
NSMutableString *mstr2 = [NSMutableString stringWithFormat:@"%@", @"abcd"];
// 插入字符串
[mstr2 insertString:@"123" atIndex:2];
NSLog(@"%@", mstr2);
// 删除
[mstr2 deleteCharactersInRange:NSMakeRange(2, 3)];
NSLog(@"%@", mstr2);
//替换
[mstr2 replaceCharactersInRange:NSMakeRange(0, 2) withString:@"00"];
NSLog(@"mutable4 = %@",mstr2);
NSRange
C语言使用结构体、指针和数组来构造复杂的数据类型,而结构体和指针在iOS编程中至关重要,Cococa为我们准备了与字符串操作有关的结构体NSRange:
NSRange:用来表示相关事物的范围
typedef struct _NSRange
{
unsigned int location; //location表示起始位置
unsigned int length; //length表示长度
}
类似NSRange,OC复杂的数据类型还有NSPoint、NSSize、以及NSRect。
NSRange有三种创建方式:
比如要得到字符串@“helloRIMIOnline”中@“Online”字符串,需要一个起始位置为9,6个长度的范围,它可以有三种方式创建:
它可以有三种方式创建:
第一种调用函数可以这么写:
NSRange range =NSMakeRange (9,6);
第二种直接给成员赋值:
NSRange range;
range.location=9;
range.length=6;
第三种应用C语言的聚合结构赋值机制:
NSRange range ={9,6};