------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Foundation框架是基础框架,这种框架中包含了很多开发中常用的数据类型,如结构体、枚举,类等。
如果想要使用Foundation框架中的定义,数据类型,那么只需要包含它的头文件就可以了。
头文件格式:#import<foundation/foudation.h>
结构体:
常用的结构体:
NSRange(location length) 表示范文
NSPoint\CGPoint 表示坐标
NSSize\CGSize 表示尺寸
NSRect\CGRect (CGPint CGSize) 表示坐标和尺寸
NSRange(location length)
// @"i love oc" // love的范围
//NSRange r1 = {2, 4}; // 不用
//NSRange r2 = {.location = 2, .length = 4};// 不用
//NSRange r3 = NSMakeRange(2, 4); // 掌握
NSString *str = @"i love oc";
// 查找某个字符串在str中的范围
// 如果找不到,length=0,location=NSNotFound==-1
NSRange range = [str rangeOfString:@"java"];
NSLog(@"loc = %ld, length=%ld", range.location, range.length);
NSPoint\CGPoint :
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20);// 最常用
NSSize\CGSize
NSSize s1 = CGSizeMake(100, 50);
NSSize s2 = NSMakeSize(100, 50);
CGSize s3 = NSMakeSize(200, 60
NSRect\CGRect (CGPint CGSize)
CGRect r1 = CGRectMake(0, 0, 100, 50);
CGRect r2 = { {0, 0}, {100, 90}};
CGRect r3 = {p1, s2};
字符串:
NSString : 不可变字符串
NSMutableString : 可变字符串
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);
数组:
NSArray :不可变数组
NSMutableArray : 可变数组
// @[] 只创建不可变数组NSArray
NSArray *array = @[@"jack", @"rose"];
// 可变数组的基本使用
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
// 添加元素
[array addObject:[[Person alloc] init]];
[array addObject:@"jack"];
// 删除元素
//[array removeAllObjects];
// 删除指定的对象
// [array removeObject:@"jack"];
[array removeObjectAtIndex:0];
// 错误写法
// [array addObject:nil];
NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类
2> 不同点
* NSArray有顺序,NSSet没有顺序
NSSet *s = [NSSet set];
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
// 随机拿出一个元素
NSString *str = [s2 anyObject];
NSLog(@"%@", str);
//NSLog(@"%ld", s2.count);
字典:
集合
1.NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1, obj2, obj3]
* 快速访问元素:数组名[i]
2.NSSet\NSMutableSet
* 无序
3.NSDictionary\NSMutableDictionary
* 无序
* 快速创建(不可变):@{key1 : value1, key2 : value2}
* 快速访问元素:字典名[key]
NSArray *persons = @[
@{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
@{@"name" : @"rose", @"qq" : @"767567"},
@{@"name" : @"jim", @"qq" : @"423423"},
@{@"name" : @"jake", @"qq" : @"123123213"}
];
// NSDictionary *jim = persons[2];
NSString *bookName = persons[0][@"books"][1];
NSLog(@"%@", bookName);
//NSArray *array = persons[0][@"books"];
//NSLog(@"%@", array);
// 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
NSLog(@"%@", persons[1][@"qq"]);
NSNumber:
// 将各种基本数据类型包装成NSNumber对象
@10.5;
@YES;
@'A'; // NSNumber对象
// 将age变量包装成NSNumber对象
int age = 100;
@(age);
NSNumber *num = [NSNumber numberWithInt:10];
NSDictionary *dict = @{
@"name" : @"jack",
@"age" : num
};
NSNumber *num2 = dict[@"age"];
int a = [num2 intValue];
NSLog(@"%d" , a);
NSDate *date = [NSDate date];
// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// y 年 M 月 d 日
// m 分 s 秒 H (24)时 h(12)时
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSString *str = [formatter stringFromDate:date];
NSLog(@"%@", str);
NSValue:
NSNumber之所以能包装基本数据类型为对象,是因为继承了NSValue
// 结构体--->OC对象
CGPoint p = CGPointMake(10, 10);
// 将结构体转为Value对象
NSValue *value = [NSValue valueWithPoint:p];
// 将value转为对应的结构体
// [value pointValue];
NSArray *array = @[value ];