OC07 -- 迭代器/NSNumber/NSValue/NSRange/NSSet/NSDate 及相互转换.(杂)
//一: 迭代器
//数组
NSArray *arr=@[@"1",@"2",@"3",@"4",@"5"];
NSEnumerator *enumerator = [arr objectEnumerator];
NSString *str = nil;
while (str = [enumerator nextObject]) {
NSLog(@"%@",str);
}
// 字典
//直接打印字典的vaule.
NSDictionary *dic = @{@"1":@"2",@"3":@"4"};
NSEnumerator *enumrator = [dic objectEnumerator];
NSString *vaule = nil;
while (vaule = [enumrator nextObject]) {
NSLog(@"%@",vaule);
}
//二: 值对象 (相互转化)
// 1: NSNumber
// 那基本数据类型转换成对象类型.
// Integer -> NSNumber
NSInteger a =2;
NSNumber *num = [[NSNumberalloc] initWithInteger:a];
NSLog(@"%@",num);
// NSNumber -> Integer
//(1)
NSInteger b = [num integerValue];
//(2)
NSNumber *number = @10;
NSArray *arr = @[@"1",@10];
// 2: NSValue
// 把结构体和指针转换成对象类型.
// 结构体的. 用于訪问自己的成员变量;不是对象调用自己属性的点语法.
//NSRange -> NSValue
NSRange range = {2,5};
NSLog(@"%ld",range.length);
NSValue *value = [NSValuevalueWithRange:range];
NSArray *arr = @[value];
// NSValue -> NSRange
NSRange rangeVau = [value rangeValue];
//指针(pointer) -> NSValue
int a = 10;
int *p = &a;
NSValue *pointer = [NSValuevalueWithPointer:p];
//NSValue ->指针(pointer)
int *p1 = [pointer pointerValue];
//三: NSSet NSMutableSet -- 集合.
// NSSet是无序的.
NSSet *set = [NSSetsetWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"2",nil];
NSLog(@"%@",set);
NSLog(@"%ld",set.count);
NSLog(@"%@",[setanyObject]);
NSLog(@"%d",[setcontainsObject:@"3"]);
// 可变集合
NSMutableSet *set1 = [NSMutableSetset];
[set1addObject:@"9"];
[set1addObject:@"8"];
NSLog(@"%@",set1);
[set1removeObject:@"9"];
NSLog(@"%@",set1);
// 遍历
for (NSString *strin set1) {
NSLog(@"%@",str);
}
//四: NSDate
NSDate *date = [NSDatedate];
NSLog(@"%@",date);
// date 获取的时间不管哪个区,都是打印相相应的零时区
// 获取一下当前所在的时区.
NSTimeZone *zone = [NSTimeZonesystemTimeZone];
NSLog(@"%@",zone);
// 获取一下和零时区相差的秒数.
NSInteger sec = [zone secondsFromGMTForDate:date];
NSLog(@"%ld",sec);
// 通过相差的秒数,能获取到如今的时间.
NSDate *newdate = [NSDatedateWithTimeIntervalSinceNow:sec];
NSLog(@"%@",newdate);
NSDate *times = [NSDatedateWithTimeIntervalSince1970:0];
NSLog(@"%@",times);
//练习1:找明天这时候的时间.
NSDate *tomorrow = [NSDatedateWithTimeIntervalSinceNow:(sec + 24 *3600)];
NSLog(@"明天的如今:%@",tomorrow);
//练习2: 昨天这时候时间.
NSDate *yesterday = [NSDatedateWithTimeInterval:(-24 *3600)sinceDate:newdate];
NSLog(@"昨天的如今:%@",yesterday);
//时间间隔
// 相应的Double 类型, 能够是小数.
//计算两个对象的时间间隔
NSTimeInterval interval = [tomorrow timeIntervalSinceDate:yesterday];
NSLog(@"%g",interval);
// 练习3:计算当前时间与一个固定时间的差值.
NSDate *unchange = [NSDatedateWithTimeIntervalSinceNow:36*3600];
NSLog(@"固定时间:%@",unchange);
NSLog(@"如今的时间%@",date);
NSTimeInterval inte = [unchange timeIntervalSinceDate:date];
NSLog(@"时差为:%g",inte);
if (inte > 0 && inte <60) {
NSLog(@"刚刚");
}elseif( inte >= 60 && inte <=3600){
NSLog(@"%g分钟前",inte/60);
}elseif(inte > 3600 && inte <=3600*24){
NSLog(@"%g小时前",inte/3600);
}else{
NSLog(@"超过%g天",inte/3600/24);
}
//五:日期和字符串的相互转换.
// NSDate -> NSString
// 第一种方式:
NSDate *date = [NSDatedate];
NSString *datestr = [NSStringstringWithFormat:@"%@",date];
NSLog(@"%@",datestr);
// 另外一种方式:
//时间的格式
// yyyy-MM-dd HH-mm-ss;
// y 年
// M 月
// d 日
// H 24小时制, h 12小时制
// m 分
// s 秒
//先设置一下时间的格式,要转换的时间要和格式相吻合.
NSDateFormatter *formatter = [[NSDateFormatteralloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];
NSDate *date = [NSDatedate];
// 通过格式,那指定的时间直接转换成NSString
// 通过这样的方式,系统会把时间切换成当前时间,无时区之差.
NSString *strdate = [formatter stringFromDate:date];
NSLog(@"%@",strdate);
// NSString -> NSDate
//把时间又减去8小时.
NSString *time =@"2015-7-23 17-19-50";
NSDateFormatter *formatter2 = [[NSDateFormatteralloc] init];
[formatter2 setDateFormat:@"yyyy-MM-dd HH-mm-ss"];
NSDate *date = [formatter2 dateFromString:time];
NSLog(@"%@",date);