------- android培训、java培训、IOS培训、期待与您交流! ----------
Foundation框架] 基本介绍
01. Foundation框架基本
正如其名,Foundation框架是其他所有ios框架的基础
Foundation框架包含了很多开发中常用的数据类型
结构体,枚举,类
要想使用foundation中的数据类型,包含它的主文件即可#import<Foundation/Foundation.h>
Foundation-结构体-01-NSRange // 字符串的起始位置和范围长度
Foundation-03-NSPoint\CGPoint // 表示点的坐标,比如屏幕的触屏点
开发中用CGPoint,因为它跨平台
int main()
{
// NSRange(location, length) // 字符串的起始位置和范围长度
// NSPoint\CGPoint // 表示点的坐标,比如屏幕的触屏点
// NSSize\CGSize // UI元素的尺寸
// NSRect\CGRect // 包括CGSize和CGPoint,一个UI元素的位置和尺寸
CGPoint p1 = NSMakePoint(10, 10);
NSPoint p2 = CGPointMake(20, 20); //最常用
NSSize s1 = CGSizeMake(100, 50);
CGSize s2 = NSMakeSize(100, 50);
CGRect r1 = CGRectMake(0, 0, 100, 50);
// CGPointZero == CGPointMake(0, 0);
CGRect r4 = {CGPointZero,CGSizeMake(100, 90)};
CGPointEqualToPoint(p1, p2); // BOOL类型,判断两个点是否相同
CGSizeEqualToSize(s1, s1); // 同上
CGRectEqualToRect(r1, r4); // 同上
// 使用这些函数的前提是添加CoreGraphics框架
// NextStep Foundation
BOOL i = CGRectContainsPoint(CGRectMake(50, 40, 100, 50), CGPointMake(130, 70));
NSLog(@"%d",i);
NSString *str = NSStringFromPoint(p1);
NSString *str1 = NSStringFromSize(s1);
NSString *str2 = NSStringFromRect(r1);
// NSLog(@"%@",str2);
//
// NSLog(@"%@",str1);
return 0;
}
int test()
{
// NSRange(location, length)
// NSPoint\CGPoint
// NSSize\CGSize // UI元素的尺寸
// NSRect\CGRect //
// NSRange(location, length)
// @"i love oc";
//
// location = 2(空格也算一个)
// length = 4
// struct Date {
// int year;
// int month;
// int day;
// };
//
// struct Date d = {2011,9,10};
// @"i love oc"
//
// 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);
return 0;
}
02. NSSet,
// NSSet 无序存放的类集合
// NSSet 和NSArray的对比
// 1>共同点
// *都是集合,都能存放多个OC对象
// *只能存放OC对象,不能存放非OC对象类型
// *本身都不可变,都有一个可变的子类
// 2>不同点
// *NSArray有顺序,NSSet没有顺序
int main()
{
NSMutableSet *s = [NSMutableSet set];
// 添加元素
[s addObject:@"hack"];
// 删除元素
[s removeObject:@"hack"];
return 0;
}
// NSSet用的比较少
int main1()
{
NSSet *s = [NSSet set]; // 空的,不能加东西,因为不可变
NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",@"tom",@"haha", nil];
// 取东西
NSString *str = [s2 anyObject];
NSLog(@"%@",str);
//NSLog(@"%ld",s2.count);
return 0;
}
03. NSDictionary,
// 三个类集合里最好用,最灵活的一个
// 字典的遍历
int main()
{
// 字典不允许有相同的key,但允许有相同的value值(object)
// 字典是无序的
NSDictionary *dict = @{@"name" : @"jack", @"qq" : @"234453456",@"address" : @"beijing", @"shouji" : @"136xxxxxx"};
// NSArray *keys = [dict allKeys];
// NSLog(@"%@",keys);
//
// for (int i =0; i<dict.count; i++) {
// NSString *key = keys[i];
// NSString *object = dict[key];
//
// NSLog(@"%@ = %@",key,object);
// }
// 第二种遍历方法 科学好用的方法
[dict enumerateKeysAndObjectsUsingBlock:
^(id key, id obj, BOOL *stop) {
NSLog(@"%@ - %@",key,obj);
//*stop = YES;
}];
return 0;
}
// 注意点
int main3()
{
// 讲不可变字典赋值给可变字典,NSDictionary并没有setobject方法
NSMutableDictionary *dict = @{@"name" : @"jack"}; // 错误写法
[dict setObject:@"rose" forKey:@"name"];
return 0;
}
// NSMutableDictionary
int main2()
{
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 添加键值对
[dict setObject:@"jack" forKey:@"name"];
[dict setObject:@"beijing" forKey:@"address"];
[dict setObject:@"rose" forKey:@"name"];
// 移除键值对
//[dict removeObjectForKey:<#(id)#>];
NSString *str = dict[@"name"];
NSLog(@"%@",str);
// 打印整个字典(键值对)
NSLog(@"%@",dict);
return 0;
}
// 基本用法
int main1()
{
// 字典
// key->value
// 索引->文字内容
// 里面储存的东西都是键值对
//NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack" forKey:@"name"];
// NSArray *keys = @[@"name",@"address"];
// NSArray *objects = @[@"jack",@"北京"];
//
// NSDictionary *dict = [NSDictionary dictionaryWithObjects:objectsforKeys:keys];
// NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
// @"jack",@"name",
// @"beijing",@"address",
// @"1234234234",@"qq",nil];
// xcode的封装,自动生成重复代码
NSDictionary *dict = @{@"name": @"jack", @"address": @"beijing"}; // 字典的标准写法
// id obj = [dict objectForKey:@"address"];
//封装上句
id obj = dict[@"name"]; // 封装后写法
NSLog(@"%@",obj);
//dict.count // 返回的是键值对的个数
NSLog(@"%ld",dict.count);
return 0;
}
04. NSNumber,
// 1.NSNumber
// 把基本数据类型包装成对象
// 之所以能转换包装,是因为继承了NSValue
// 2.NSValue
// 可以包装任何东西
int main()
{
// 将结构体包装成对象
// 结构体->OC对象
CGPoint p = CGPointMake(10, 10);
// 将结构体转为value对象
NSValue *value = [NSValue valueWithPoint:p];
// 将value转为相应结构体
//[value pointValue];
NSArray *array = @[value ];
@"value";
return 0;
}
// NSNumber将各种基本数据类型包装成对象
int main2()
{
// @20 将20包装成一个NSNumber对象
// 将各种基本数据类型包装成对象
NSArray *array = @[
@{@"name" : @"jack", @"age" : @20},
@{@"name" : @"jack", @"age" : @10.5},
@{@"name" : @"jack", @"age" : @YES},
@{@"name" : @"jack", @"age" : @'A'}
];
// 将age变量包装成NSNumber对象
int age = 100;
@(age); // 写@age计算机会把它当关键字
NSNumber *n = [NSNumber numberWithDouble:10.5];
int d = [n doubleValue];
// 包装成字符串
int a =20;
NSString *str = [NSString stringWithFormat:@"%d",a];
NSLog(@"%d",[str intValue]);
return 0;
}
05. NSDate
// NSDate 一个NSDate对象就可以表现一个时间
//
// 字符串转为时间
int main()
{
NSString *time = @"2011/09/0815:34";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy/MM/ddHH:mm";
NSDate *date = [formatter dateFromString:time];
NSLog(@"%@",date);
return 0;
}
// 日期格式化
int main2()
{
NSDate *date = [NSDate date];
// 日期格式化类
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-ddHH:mm:ss"; // 固定格式,小写hh是12小时制
// @2011-04-21 17:23:45
NSString *str = [formatter stringFromDate:date];
NSLog(@"%@",str);
return 0;
}
int main1()
{
// 创建一个时间对象
NSDate *date = [NSDate date];
// 打印出得时0时区的时间(北京-东8区)
NSLog(@"%@",date);
NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
// 从1970开始走过的秒数
NSTimeInterval seconds = [date2 timeIntervalSince1970];
//[date2 timeIntervalSinceNow];
NSLog(@"%@",date2);
return 0;
}