Foundation框架是iOS开发的基础框架,它包括字符串、集合、日期、时间等基础类。
1 结构体
1、NSRange(location length):用来表示一段范围,location表示起点,length表示长度。创建该结构体变量,一般用系统提供的NSMakeRange()函数。
int main()
{
//创建NSRange的三种方式,一般用第三种
NSRange r1 = {2, 4}; // 一般不用
NSRange r2 = {.location = 2, .length = 4};// 一般不用
NSRange r3 = NSMakeRange(2, 4); // 用这种方式
NSString *str = @"i love oc";
// 查找某个字符串在str中的范围
NSRange range1 = [str rangeOfString:@"love"];
NSLog(@"loc = %ld, length=%ld", range1.location, range1.length);
// 如果找不到,length=0,location=NSNotFound==-1
NSRange range2 = [str rangeOfString:@"java"];
NSLog(@"loc = %ld, length=%ld", range2.location, range2.length);
return 0;
}
NSPoint\CGPoint (x,y):用来表示一个点,一般用CGPointMake()创建
NSSize\CGSize (width,height):用来表示一个平面空间的大小,一般用CGSizeMake()创建
NSRect\CGRect (CGPoint CGSize):用来表示一个矩形,它包含矩形左上角顶点坐标,以及矩形的大小,一般用CGRectMake()创建
int main()
{
//创建Point,Size,Rect
CGPoint p = CGPointMake(0, 0);
CGSize s = CGSizeMake(12, 20);
CGRect r = CGRectMake(0, 0, 20, 30);
// 将结构体转为字符串
NSString *str1 = NSStringFromPoint(p);
NSString *str2 = NSStringFromSize(s);
NSString *str3 = NSStringFromRect(r);
NSLog(@"point = %@", str1);
NSLog(@"size = %@", str2);
NSLog(@"rect = %@", str3);
return 0;
}
int main()
{
//创建Point,Size,Rect
CGPoint p = CGPointMake(0, 0);
CGSize s = CGSizeMake(12, 20);
CGRect r = CGRectMake(0, 0, 20, 30);
// 将结构体转为字符串
NSString *str1 = NSStringFromPoint(p);
NSString *str2 = NSStringFromSize(s);
NSString *str3 = NSStringFromRect(r);
NSLog(@"point = %@", str1);
NSLog(@"size = %@", str2);
NSLog(@"rect = %@", str3);
return 0;
}
2 NSString和NSMutableString
NSString代表字符序列不可变的字符串,而NSMutableString则代表字符序列可变的字符串。NSMutableString是NSString的子类。NSString的大致包括如下功能。
1、创建字符串:可以使用init开头的实例方法,也可使用string开头的类方法,还可以直接使用@""的形式给出字符串常量
2、读取网络URL或文件初始化字符串
3、將字符串内容写入文件或URL
4、获取字符串长度,包括字符个数和字节个数
5、连接,分隔,替换,比较字符串
//创建字符串
void stringCreate()
{
/*
1.字符串的创建
*/
NSString *s1 = @"jack";
NSString *s2 = [[NSString alloc] initWithString:@"jack"];
NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d", 10];
// C字符串 --> OC字符串
NSString *s4 = [[NSString alloc] initWithUTF8String:"jack"];
// OC字符串 --> C字符串
const char *cs = [s4 UTF8String];
// 读取文件创建字符串,NSUTF8StringEncoding 用到中文就可以用这种编码
NSString *s5 = [[NSString alloc] initWithContentsOfFile:@"/Users/apple/Desktop/1.txt" encoding:NSUTF8StringEncoding error:nil];
// URL : 资源路径
// 协议头://路径
// file://
// ftp://
//
// http://www.baidu.com
// NSURL *url = [[NSURL alloc] initWithString:@"file:///Users/apple/Desktop/1.txt"];
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/1.txt"];
NSString *s6 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSLog(@"s6=\n%@", s6);
/*
一般都会有一个类方法跟对象方法配对
[NSURL URLWithString:<#(NSString *)#>];
[NSString stringWithFormat:@""];
[NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
*/
}
void stringExport()
{
// 字符串的导出
[@"Jack\nJack" writeToFile:@"/Users/apple/Desktop/my.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSString *str = @"4234234";
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/my2.txt"];
[str writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
int main()
{
NSMutableString *s1 = [NSMutableString stringWithFormat:@"my age is 10"];
// 拼接内容到s1的后面
[s1 appendString:@" 11 12"];
// 获取is的范围
NSRange range = [s1 rangeOfString:@"is"];
[s1 deleteCharactersInRange:range];
NSString *s2 = [NSString stringWithFormat:@"age is 10"];
NSString *s3 = [s2 stringByAppendingString:@" 11 12"];
NSLog(@"s1=%@, s2=%@", s1, s2);
return 0;
}
3 NSArray和NSMutableArray
NSArray代表元素有序,可重复的一个集合,集合中每个元素都有其对应的顺序索引,NSArray只能保存对象,不能保存基本类型。NSArray代表集合元素不可变的集合,一旦NSArray创建成功,程序不能向集合中添加新的元素,不能删除集合中已有的元素,也不能替换集合元素。NSMutableArray是NSArray的子类,它代表的是一个集合元素可变的集合,因此,可以向集合中添加,删除,替换元素。
void use()
{
// OC数组不能存放nil值
// OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
// 这个array永远是空数组
// NSArray *array = [NSArray array];
/*
1.NSArray的创建
*/
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
// nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
// [array2 count];
//NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];
// 快速创建一个NSArray对象
NSArray *array4 = @[@"jack", @"rose", @"4324324"];
//NSMutableArray *ARR = @[@"jack", @"rose"];
/*
2.NSArray的元素个数
*/
NSLog(@"%ld", array3.count);
/*
3.NSArray中元素的访问
*/
NSLog(@"%@", [array3 objectAtIndex:1]);
//array3[1];
NSLog(@"%@", array3[0]);
}
// 遍历数组
void use2()
{
Person *p = [[Person alloc] init];
NSArray *array = @[p, @"rose", @"jack"];
//遍历数组,自定义方法
// for (int i = 0; i<array.count; i++)
// {
// NSLog(@"%@", array);
// }
// id obj代表着数组中的每一个元素
//int i = 0;
// for (id obj in array)
// {
// // 找出obj元素在数组中的位置
// NSUInteger i = [array indexOfObject:obj];
//
// NSLog(@"%ld - %@", i, obj);
// //i++;
//
// if (i==1)
// {
// break;
// }
// }
//系统遍历数组的方法
[array enumerateObjectsUsingBlock:
// 每遍历到一个元素,就会调用一次block
// 并且当前元素和索引位置当做参数传给block
^(id obj, NSUInteger idx, BOOL *stop)
{
NSLog(@"%ld - %@", idx, obj);
if (idx == 0)
{
// 停止遍历
*stop = YES;
}
}];
}
//NUMutableArray的使用
void use3()
{
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
// @[] 只创建不可变数组NSArray
/* 错误写法
NSMutableArray *array = @[@"jack", @"rose"];
[array addObject:@"jim"];
*/
// 添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
// 删除元素
//[array removeAllObjects];
// 删除指定的对象
// [array removeObject:@"jack"];
[array removeObjectAtIndex:0];
// 错误写法
// [array addObject:nil];
NSLog(@"%@", array);
NSLog(@"%ld", array.count);
} |