Foundation框架
(1)结构体
Foundation基础框架是其他所有的ios框架的基础
Foundation框架包含了很多开发中常用的数据类型
struct Date{
int year;
int month;
int day;
};
struct Date d = {2011,9,1};
struct Date d2 = {.month = 10;.yeah = 2019,.day = 20};
例子:找一个字符串里面的某个单词或者字符在字符串里面的位置
@"i love oc";//love的范围
NSRange r1 = {2,4};//不用,不是太明确
NSRange r2 = {.loction = 2,.length = 4};//稍麻烦,也不用
NSRange r3 = NSMakeRange(2,4); //掌握
NSString *str = @"i love oc";
NSRange range = [str rangeofString:@"love"];
NSLog(@"loc = %ld,leng = %ld",rang.location,range.length);
//如果找不到的话,length = 0,location = NSNotFound = -1;
NSNotFound 以整数形式打印出来是-1,以ld打印出来是9223372036854775807. CGPoint p1 = NSMakePoint(10,10);
NSPoint p2 = CGPointMake(20,20);
NSSize s1 = CGSizeMake(100,50);
NSSize s2 = NSMakeSize(100,50);
CGSize s3 = NSMakeSIze(200,60);
CGRect r1 = CGRectMake(0,0,100,50); //将结构体转为字符串
NSString *str = NSStringFromPoint(p1);
NSLog(@"%@",str); //其他几个类似差不多
//比较两个点是否相同(x,y)
BOOl b = CGPointEqualToPoint(CGPointMake(10,10),CGPointMake(10,10));
//CGSizeEqualToRect(CGRect,rect1,CGRect rect2);
//CGSizeEqualToSize(CGSize size,CGSize size2);
BOOL b2 = CGRectContainsPoint(CGRectMake(50,40,100,50),CGPointMake(130,70));
NSLog(@"%d",b2);
这里CG开头的引用了另外一个框架 CoreGraphics框架
所以使用这些函数的前提是添加CoreGraphics框架. (2)//字符串
NSString:不可变的字符串
NSMatableString:可变的字符串
1.字符串的创建
NSString *s1 = @"jack";
//NSString *s2 = [[NSString alloc]initWithString:@"jack"];
NSString s3 = [[NSString alloc]initWithFormat:@"age is %d",10];
//字符串-->oc字符串
NSString *s4 = [[NSString alloc]initWithUTF8String:"jack"];
//oc字符串-->c字符串
const char *cs = [s4 UTF8String];
NSString *s5 = [NSString alloc]initWithContentsofFile:@"绝对路径"encoding:NSUTF8StringEncoding error:
(NSError *_autoreleaseing *);
//NSUTF8StringEncoding 用到中文就可以用这种编码
//URL:资源路径
//http://weibo.com/a.png
协议头://路径
int main(){
NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"];
//拼接内容到s1的后面
[s1 appendString:@"11 12"];
NSString *s2 = [NSString stringWithFormat:@"age is 10"];
NSLog(@"s1 = %@,s2 = %@",s1,s2);//不可拼接
return 0;
}
(3)NSArray的引入:
//获取is的范围
NSRange range = [s1,rangeofstring:@"is"];
//单用的时候[s1 deletecharactersInRang = NSMakeRange(4,2)];
[s1 deletecharactersInRang = range];
//不可变的是在内存中重新复制一份给新的变量,再进行拼接,赋给新的那个变量。 NSArray:不可变的数组
NSMutableArray:可变数组
//oc数组只能存放oc对象,不能存放非oc对象类型,比如int、struct、enum等
//这个array永远是空数组
//NSArray *array = [NSArray array];
//oc数组不能存放nil值
NSArray *array2 = [NSArray arrayWithObject:@"jack"];
//nil是数组元素结束的标记
NSArray *array3 = [NSArray arrayWithObjects:@"jact",@"rose",nil];
//[array2 Count];
NSLog(@"%ld",array3.Count);
return 0;
//怎样去访问数组里面的元素
//NSArray *array4 = [NSArray arrayWithObjects:@"jack",@"rose",@"4324324",nil];
//快速创建一个NSArray对象
NSArray *array4 = @[@"jack",@"rose",@"4324324"]; NSArray的元素个数
NSLog(@"%ld",array3.Count);
NSLog(@"%@",[array3objectAtIndex:1]);
//array3[1];
NSLog(@"%@",array3[0]);
//遍历
int main(){
Person *p = [[Person alloc]init];
NSArray *array = @[p,@"rose",@"jack"];
for(int i = 0;i
NSLog(@"%@",array[i]);}
//id obj代表着数组中的每一个元素
//int i = 0;
for(id obj in array)
{//找出obj元素在数组中的位置
int i =[array indexOfObject:obj];
NSLog(@"%ld - %@",i,obj);
//i++
}
[array enumerateObjectsUsingBlock:
//每遍历到一个元素,就会调用一次block
//并且当前元素位置当做参数传给block
^(id obj,NSUInteger idx,BOOL *stop){
NSLog(@"--------------------");
NSLog(@"%ld - %@",idx,obj);
//调用block
sumBlock(10,11);
];
//if(idx==0)
{//停止遍历
*stop = YES;
}
//外循环for语句
for(int i = 0;i
//用来标记是否需要停止遍历
BOOL isStop = NO;
//取出元素
id obj = array;
Myblock(obj,i,&isStop);
if(isStop)
{break;}
(4)综合练习:
//计算单个文件的代码行数
考察NSString和NSArray的使用
//计算单个文件的代码行数
path:文件路径 返回值:int 代码行数
int main(){
int count = codeLineCount(@"全部路径"); //在这里可以存入单个文件或者文件夹的路径
NSLog(@"count = %d",count);
return 0;
}
NSUInteger codeLineCount(NSString *path)
{ //1.加载文件内容
NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",count);
//2.将文件内容切割为每一行
NSArray *array = [content componentsSeparatedByString:@"\n"];
return array.count;
}
int i=0;
for(NSString *line in array){
NSLog(@"%d-%@",i,line);
i++
} //计算整个文件夹的代码行数
NSFileManager 文件管理者
//获得文件管理者
NSFileManager *mgr = [NSFileManager defaultManager];
//2.获取判断path是文件夹还是文件路径
BOOL exist = [mgr fileExistsAtPath:path isDirctionary:&dir];
//判断此路径是否存在
if(!exist) //如果不存在,直接返回0
return 0;
BOOL dir = NO; //判断标记是否是文件夹
if(dir)
{
NSLog(@"是个文件夹");
}else{
NSLog(@"是个文件");
}
int count = 0;
在上述判断是文件夹的时候则可以进行下一步的抉择
//装着当前文件夹下面的所有内容(文件夹、文件)
NSArray *array = [mgr contentsOfDirectionAtPath:path error:nil];
//遍历数组中的所有文件夹名
for(NSString *filename in array){
NSString *fullPath = [NSString stringWithFormat:@"[url=]%@/%@",path,filename[/url]];
count += codeLineCount(fullpath);
}
return count;
//判断文件中的扩展名
NSString *extension = [[path pathExtension lowercaseString];//转小写
NSLog(@"%@",extension);
//做判断
if(![Extension isEqualTostring:@"h"]&&![Extension isEqualTostring:@"m"]&&![Extension isEqualTostring:@"c"])
{
//文件扩展名不是.m\.h\.c
return 0 ;
}
NSArray 存有序的数组、不可变的
NSMutableArray 可变数组
int main(){
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose",@"jim",nil];
//添加对象,创建一个Person对象存入
[array addObject:[[Person alloc]init]];
[array addObject:@"jack"];
[array addObject:10]; //错误写法、在oc当中存基本数据类型不可以
//删除元素
[array removeAllObjects];
//删除指定元素
[array removeObject:@"jack"];
//错误写法
[array addObject:nil];
[array removeObjectAtIndex:2]; //删除了第3个下标对应的数字
NSLog(@"array",array);
//快速生成数组
//下面二行是不可行的存的是不可变数组、却用到了可变数组的方法
NSArray *array = @[@"jack",@"rose"];
[array addObject:@"jim"];
//@[]只创建不可变数组的NSArray
//在这里其他的还有很多,看PPT就可以,可以练习、去实现一下、都差不多。
(5)NSSet
int main(){
NSSet *s = [NSSet set]; //空放了一个数组
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",nil];
//NSLog(@"%ld",s2.count);
NSString *str = [s2 anyObject];
//随机拿出一个元素
NSLog(@"%@",str); NSMutableSet *s = [NSMutableSet set];
//添加元素
[s addObject:@"hack"];
//删除元素
[s removeObject:(id)];
return 0;
}
NSSet和NSArray的对比
1.共同点
都是集合、都能存放多个oc对象
只能存放多个oc对象,不能存放非oc对象类型(基本数据类型:int\char\float等、结构体、枚举等)
本身的都不可以变、都有一个可变的子类
2.不同点
NSArray有顺序、NSSet没有顺序 NSDictionary——字典(类似于java中的Map集合)
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack"forkey:"@name"];
NSArray *keys = @[@"name",@"address"];
NSArray *objects = @[@"jack",@"北京"];
NSDictionary *dict = @{@"name":@"jack",@"address":@"北京"};
//id obj = [dict objectForkey:@"name"];
id obj = dict[@"name"];
NSLog(@"%@",obj);
NSLog(@"ld",dict.count);//返回的是键值对的个数 NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//添加键值对
[dict setObject:@"jack"forkey:@"name"];
[dict setObject:@"北京"forkey:@"adress"];
[dict setObject:@"rose"forkey:@"name"];
NSString *str = dict["name"];
//移除键值对
[dict removeObjectForkey:(id)];
(6)//字典遍历
int main(){
NSDictionary *dict = @{@"name",@"jack",@"qq":@"7657567765"};
/*
NSArray *keys = [dict allkeys];
for(int i = 0;i
NSString *key = keys;
NSString *object = dict[key];
NSLog(@"%@%@"key,object);
}
[dict enumeratekeysAndObjectUsingBlock]:^(id key,id obj,BOOL *stop){
NSLog(@"%@-%@",key,obj);
}]; |