今天学习了Objective-C中经常会用到的Foundation框架中的一些基本类,包括NSNumber(数字、字符等)、NSString(字符串)、NSArray(数组)、NSDictionary(字典,其实也是一种集合类)和NSSet(集合)等。这些类都包含在Foundation.h类库中,每个类中都声明了一些非常有用的方法,他们可以认为是OC中的一些基本数据类型,所以他们的重要性不言而喻。下面对他们的使用方法总结如下:
1、NSNumber
C语言中有一些基本数据类型,如int、float、char、等,OC中提供的NSNumber类可以使用已声明的方法把这些基本类型的数据和对象进行相互转换,以方便进行具体的操作。
//1)基本类型===〉对象,有两种方法可以实现,即类方法和实例方法:
intnumr=1;
floatnum2=4.5;
BLLOisBool=NO;
charc=’c’;
//类方法实现
NSNumber*IntNumber=[NSNumber numberWithInt:num];
NSNumber*FloatNumber=[NSNumber numberWithFloat:float];
//实例方法实现
NSNumber*isBoolNumber = [[NSNumber alloc] initWithBool:isBool];
NSNumber*CNumber = [[NSNumber alloc] initWithChar:c];
//打印
NSLog(@"IntNumber : %@",IntNumber);
NSLog(@"FloatNumber:%@" FloatNumber);
NSLog(@"isBoolNumber : %@",isBoolNumber);
//2) 对象===〉基本类型
int d = [IntNumber intValue];
float f1 = [FloatNumber floatValue];
char c1 = [CNumber charValue];
NSLog(@"%d,%f,%c",d,f1,c1);
2、NSString
NSString是OC重的字符串类型,它定义的对象是字符串对象,字符串对象的格式是@”字符串内容”。它的方法使用如下:
//字符串创建
//字符串常量
NSString *str = @"good!";
//字符串的变量
//1)空字符串创建
NSString *str2 = [[NSString alloc] init];
str2 = @"test";
NSString *str3 = [NSString string];
NSLog(@"str = %@,str2=%@,str3=%@",str,str2,str3);
//2)快速创建字符串
NSString *str4 = [[NSString alloc]initWithString:@"hello"];
NSString*str5 = [NSString stringWithString:@"world"];
NSLog(@"str4 = %@,str5=%@",str4,str5);
//3)格式化创建字符串
NSString *str6 = [[NSString alloc]initWithFormat:@"%d_%d_%d_%d_%d_%@",1,2,3,4,5,str4];
NSLog(@"str6=%@",str6);
//判断字符串是否相等
if([str4 isEqualToString:str5]){
NSLog(@"字符串相等");
}else{
NSLog(@"字符串不相等");
}
NSLog(@"%p,%p",str4,str5);
//判断字符串是同一个对象
if(str4== str5){
NSLog(@"是同一个对象!");
}
//基本数据类型 è 字符串
//str =[[NSString alloc] initWithFormat:@"%d",5];
//字符串===〉基本数据类型
NSString*str7 = [NSString stringWithFormat:@"%d",56];
int num7= [str7 intValue]; //字符串转整型
NSLog(@"num7+1=%d",num7+1);
//字符串转换 è 数组
NSArray*array = [str6 componentsSeparatedByString:@"_"];
NSLog(@"%@",array);
//字符串截取
NSLog(@"substringto 5 :%@",[str6 substringToIndex:5]);
NSLog(@"substringfrom 5:%@",[str6 substringFromIndex:5]);
//截取某一个范围的字符串
NSRangerang;
rang.length= 4;
rang.location= 2; //截取的时候,包含起始位置
NSLog(@"substring:%@",[str6 substringWithRange:rang]);
//字符串查找(查找子串)
NSString*str8=@"hello01.txt";
//查找 ,返回范围
NSRangerang2 = [str8 rangeOfString:@" "];
if(rang2.location!= NSNotFound){
NSLog(@"substr location =%ld ,length=%ld",rang2.location,rang2.length);
}else{
NSLog(@"NSNotFound!!");
}
//可变长度的字符串
NSMutableString*mutableStr = [NSMutableString stringWithString:@"爱大米"];
//动态的插入内容
[mutableStrinsertString:@"老鼠"atIndex:0];
NSLog(@"mubableStr:%@",mutableStr);
3、NSArray
在OC中,NSArray类相当于C语言中的数组类型,其用于存储对象的有序列表,可以在NSArray对象中放入任何类的对象,NSArray创建的是不可变对象的数组,所以出现了它的补充类NSMutableArray,这样我们就可以随意的添加和删除数组中的对象了。它们的基本用法如下:
//定义数组并且初始化
NSArray *array1 = [NSArrayarrayWithObject:@"one"];
NSArray *array2 = [NSArray arrayWithObjects:@"one",@"two",@"three",@"four",nil];
NSArray *array3 = [NSArrayarrayWithArray:array2];
NSLog(@"array1 = %@, array2 = %@, array3 =%@",array1,array2,array3);
//数组的访问
//求长度
int len = [array2 count];
//访问元素
NSString *arrayObject = [array3 objectAtIndex:3];
//将数组元素连接成一个字符串
NSString *newStr = [array2componentsJoinedByString:@"_"];
NSLog(@"array2 length:%d,index3=%@,joinStr = %@",len,arrayObject,newStr);
//可变数组的使用
NSMutableArray *mutableArray = [NSMutableArrayarrayWithObjects:@"one", nil];
//----添加元素
[mutableArray addObject:@"two"];
[mutableArray addObject:@"three"];
[mutableArray addObject:@"four"];
//-------------添加一个数组
[mutableArray addObjectsFromArray:array2];
//----计算长度
int length = [mutableArray count];
NSLog(@"mutableArray length=%d,countent:%@",length,mutableArray);
//---- 移除最后一个
[mutableArray removeLastObject];
//---- 移除指定的数据
[mutableArray removeObjectAtIndex:0];
length = [mutableArray count];
NSLog(@"***mutableArraylength=%d,countent:%@",length,mutableArray);
//数组的遍历方式:传统方式 高效方式
//----- 传统方式
for (int i=length-1; i>=0; i--) {
NSLog(@"%d = %@",i,[mutableArray objectAtIndex:i]);
}
//----- 高效方式,这里要注意,高效方法是从Objective-C2.0开始加入的新特性,如果你或者//你的用户需要在Tiger(MAC OS X10.4)系统上运行,那么就不能使用这个新语法,这真是//太糟糕了。
for(NSString *str in mutab leArray){
NSLog(@"obj =%@",str);
}
4、 NSDictionary
OC种的字典类型,字典就是关键字及其定义的集合。NSDictionary在给定的关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的对象)。然后你就可以用这个关键字来查找相应的数值。
//----- 初始化
NSNumber *numObj = [NSNumbernumberWithInt:100];
//初始化一组数组
// 值 key
NSDictionary *dic1 = [NSDictionarydictionaryWithObject:numObj forKey:@"key1"];
//初始化多组数据
NSDictionary*dic2=[NSDictionarydictionaryWithObjectsAndKeys:@"hello",@"key2",@"world",@"key3",@"csdn",@"key4",nil];
//用一个字典初始化另外一个字典
NSDictionary *dic3 = [NSDictionarydictionaryWithDictionary:dic2];
//打印输出
NSLog(@"dic1 : %@,dic2 : %@, dic3 : %@",dic1,dic2,dic3);
//------ 获取值
//获取长度
int len = [dic2 count];
NSLog(@"dic2 length = %d",len);
//根据key获取key所对应的value
NSLog(@"key3 value = %@",[dic2objectForKey:@"key3"]);
//可以获取所有的keys
NSArray *allkeys = [dic3 allKeys];
NSLog(@"NSarray allkey =%@",allkeys);
//可以获取所有的values
NSArray *allvalues = [dic3 allValues];
NSLog(@"NSarray allvalues =%@",allvalues);
//----- 可变字典
//----- 初始化
NSMutableDictionary*dic4=[NSMutableDictionarydictionaryWithObjectsAndKeys:@"one",@"key4",@"two",@"key5",nil];
NSLog(@"dic4 : %@",dic4);
//定义成空字典
NSMutableDictionary *dic5 =[NSMutableDictionary dictionary];
//将字典dic2整体添加到dic4中
[dic4 addEntriesFromDictionary:dic2];
NSLog(@"addEntriesFromDictionary dic2:%@",dic4);
//添加一个元素
[dic4setValue:@"three" forKey:@"key6"];
NSLog(@"dic4 setValue : %@",dic4);
//根据key获取value
NSLog(@"key6 = %@",[dic4objectForKey:@"key6"]);
//------ 字典的遍历
//1)一般的遍历
NSArray *keys4 = [dic4 allKeys];
for(inti=0;i<[dic4 count];i++){
NSLog(@"dic4 key =%@,value=%@",[keys4 objectAtIndex:i],[dic4 objectForKey:[keys4objectAtIndex:i]]);
}
//2)高效的for
for (NSString *key in dic4){
NSLog(@"dic4 key = %@ ,value =%@",key,[dic4 objectForKey:key]);
}
//3)使用枚举进行遍历
NSEnumerator *enum1 = [dic4 keyEnumerator];
//获取key,如果不为空,则进行偏移
id key = [enum1 nextObject];
while (key) {
NSLog(@"key= %@ ,value = %@ ",key,[dic4 objectForKey:key]);
key =[enum1 nextObject];
}
5、NSSet
集合对象的关键字是NSSet与NSMutableSet,前者是不可变集合,后者是可变集合。NSSet对象和NSArray对象用法相似,但相对来说NSSet对象访问速度更慢一些,NSArray对象存入速度更快一些。用法如下:
//----- 定义、初始化
NSSet *set = [[NSSet alloc]initWithObjects:@"one",@"one",@"two",nil];
//用数组定义NSSet;
NSArray *arrayset = [NSArrayarrayWithObjects:@"1",@"2",@"3",nil];
NSSet *set2 = [NSSet setWithArray:arrayset];
NSLog(@"set1 = %@,set2 =%@",set,set2);
//访问方式
//----- 获取长度
int len = [set2 count];
NSString *s = [set2 anyObject];
NSLog(@"set2 length = %d,obj =%@",len,s);