枚举,类型转换,#NSData,NSSet,#NSDate

本文介绍了 Objective-C 中的迭代器使用方法、数值对象转换、文件路径解析、NSSet 集合操作、NSDate 时间处理等内容,并提供了实际代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

加星号的为重要内容(^o^)/~

    // 迭代器
    // 枚举
    // 数组的枚举
    NSArray *arr = @[@"1",@"2",@"3",@"4",@"5",@"6"];
    NSEnumerator *enumerator = [arr objectEnumerator];
    NSLog(@"%@", enumerator);
    NSString *str = nil;
    while (str = [enumerator nextObject]) {
        /* code to act on each element as it is returned */
        NSLog(@"%@", str);
    }
    // 字典的枚举
    NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"2",@"3",@"4", nil];
    NSEnumerator *enumer = [dic objectEnumerator];
    NSString *str1 = nil;
    // 字符串str1内的值 为字典中所有value的值
    while (str1 = [enumer nextObject]) {
        NSLog(@"%@", str1);
    }
    // 都是用字符串类型进行打印
    // 值对象
    // 把基本数据类型转换成对象类型
    // Integer -> NSNumber
    NSInteger a = 10;
//    NSNumber *number = [[NSNumber alloc] initWithInteger:a];
    NSNumber *number = [NSNumber numberWithInteger:a];
    NSLog(@"%@", number);
    // NSNumber -> Integer
    NSInteger b = [number integerValue];
    NSLog(@"%ld", b);
    // NSNumber类型是一种便捷类型,它可以将所有数字类型(整型,浮点型,双浮点型)转换为对象类型,而它本身只是NSValue的一个子类型
    // 字面量
    NSNumber *num = @10;
    // 数组里边放形如@10这样的元素就相当于是NSNumber类型
    NSArray *arr1 = @[@"1", @10];
    // NSValue
    // 把结构体和指针换成对象类型
    NSRange range = {2, 5};
    // 结构体的.是访问成员变量,对象调用属性是点语法
//    NSRange -> NSValue
    NSLog(@"%ld", range.length);
    NSValue *value = [NSValue valueWithRange:range];
    NSLog(@"%@", value);
    // 再把对象转换成结构体
    NSRange rangeV = [value rangeValue];
    // 没懂!!!!!!
    // 指针转换为对象
    int A = 10;
    int *p = &A;
    NSValue *pointer = [NSValue valueWithPointer:p];
    NSLog(@"%@", pointer);
    // 对象转换为指针
    int *p1 = [pointer pointerValue];
    NSLog(@"%d", p1);
    // 文件路径
    // 给定一个接口文件<电影清单>,对它进行简单解码
    NSString *path = @"/Users/dlios/Desktop/OC7_NSDate/OC7_NSDate/movielist.txt";
//    NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    // 转换成NSData对象 Data:数据
    NSData *data = [NSData dataWithContentsOfFile:path];
    NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
//    NSLog(@"%@", dic);
    // 如果想遍历数据内容一般定义到数组这层就够了
    NSMutableArray *arr = dic[@"result"];
//    NSLog(@"%@",arr);
    NSDictionary *movieDic = arr[0];
//    NSLog(@"%@", movieDic);
    NSString *str0 = movieDic[@"movieName"];
    NSLog(@"%@", str0);

    NSString *movieName = dic[@"result"][10][@"movieName"];
    NSLog(@"%@", movieName);

    NSString *pic_url = dic[@"result"][9][@"pic_url"];
    NSLog(@"%@", pic_url);
    NSLog(@"*********");
    for (NSInteger i = 0; i < arr.count; i++) {
        NSLog(@"%@", arr[i][@"movieName"]);
    }
    NSLog(@"*********");
    for (NSDictionary *dic in arr) {
        NSLog(@"%@", dic[@"movieName"]);
    }
    // 接口文件<活动清单> 路径
    NSString *path = @"/Users/dlios/Desktop/OC7_NSDate/OC7_NSDate/activitylist.txt";
//    NSString *str = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
    // 转换成NSData对象
    NSData *data = [NSData dataWithContentsOfFile:path];
    NSMutableDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSMutableString *str1 = dic[@"events"][2][@"owner"][@"name"];
    NSLog(@"%@", str1);
    NSMutableString *str2 = dic[@"events"][2][@"end_time"];
    NSLog(@"%@", str2);
    NSMutableString *str3 = dic[@"events"][2][@"begin_time"];
    NSLog(@"%@", str3);
    // 三种方式打印出演出时间区间
    // 无返回值的(只能打印)
    NSLog(@"%@ - %@", str3, [str2 substringFromIndex:11]);
    // [str2 insertString:@"20:00:00-" atIndex:10];    // 方法不能用,报错
    // 有返回值的(可以修改)
    NSString *str0 = [NSString stringWithFormat:@"%@ - %@", str3, [str2 substringFromIndex:11]];
    NSLog(@"%@", str0);
    // 这种方法也可以, 也是有返回值的
    NSMutableString *str00 = [NSMutableString string];
    [str00 appendFormat:@"%@ - %@", str3, [str2 substringFromIndex:11]];
    NSLog(@"%@", str00);

    // 查找接口中有多少key为"category",值为"film"的接口,并输出个数
    NSMutableArray *arr = dic[@"events"];
    NSInteger count = 0;
    for (NSMutableDictionary *dic in arr) {
        if ([dic[@"category"] isEqualToString:@"film"]) {
            count++;
        }
    }
    NSLog(@"%ld", count);
    // NSSet 集合:无序 不能有重复元素 元素必须是对象
    NSSet *set = [NSSet setWithObjects:@"1",@"2",@"3",@"4",@"5",@"2", nil];
    NSLog(@"%@", set);
    NSLog(@"%ld", set.count);
    // 返回其中的某一个元素
    // 本身有取随机元素的功能,但随机性已经在创建集合的时候就完成了,如果想取其他元素,只能直接在原集合处进行修改
    NSLog(@"%@", [set anyObject]);
    // 判断里边是否有3 返回BOOL类型
    NSLog(@"%d", [set containsObject:@"3"]);
    // 可变集合
    NSMutableSet *set1 = [[NSMutableSet alloc] initWithObjects:@"1",@"2",@"3",@"4", nil];
    NSLog(@"%@", set1);
    // 添加元素
    [set1 addObject:@"5"];
    // 删除
    [set1 removeObject:@"3"];
    // 用forin进行遍历
    for (NSString *temp in set1) {
        NSLog(@"%@", temp);
    }
    // NSDate是一个日期的类
    // 这样初始化得到的date对象得到的其实是当前零时区的时间
    NSDate *date = [NSDate date];
    NSLog(@"%@", date);
    // +date获取的时间无论在哪个区,都是打印相对应的零时区的时间
    // 获取一下当前所在的时区 TimeZone
    NSTimeZone *zone = [NSTimeZone systemTimeZone];
//    NSLog(@"%@", zone);
    // 获取一下和0时区的时差(相差的秒数)
    NSInteger seconds = [zone secondsFromGMTForDate:date];
//    NSLog(@"%ld", seconds);
    // 通过相差的秒数,能获取到当前时区的时间
    NSDate *localDate = [NSDate dateWithTimeIntervalSinceNow:seconds]; // (NSTimeInterval)时间间隔
    NSLog(@"%@", localDate);
    // 输出明天此时的时间
    NSDate *times1 = [NSDate dateWithTimeIntervalSinceNow:24 * 60 * 60 + seconds];
    NSLog(@"%@", times1);
    // 输出昨天此时的时间
    NSDate *times2 = [NSDate dateWithTimeIntervalSinceNow:24 * 60 * 60 * (-1) + seconds];
    NSLog(@"%@", times2)
    // 小知识^_^
    //  <#NSString# >  <#NSString#> 打印出高亮字符的方法,即代码提示所给内容
    // 关于计算机元年
    // 最初计算机操作系统是32位,而时间也是用32位表示。32位能表示的最大值是2147483647。另外1年365天的总秒数是31536000,2147483647/31536000 = 68.1,也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000,也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。
    // 到这里,我想问题的答案已经出来了:因为用32位来表示时间的最大间隔是68年,而最早出现的UNIX操作系统考虑到计算机产生的年代和应用的时限综合取了1970年1月1日作为UNIX TIME的纪元时间(开始时间),至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作系统可以表示到292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间已经是千亿年以后了。
    NSDate *times = [NSDate dateWithTimeIntervalSince1970:0];
    NSLog(@"%@", times);
    NSLog(@"%g", NSTimeIntervalSince1970);
    //下面这个打印的是2001年 方便选取时间
    NSLog(@"%@", [NSDate dateWithTimeIntervalSince1970:NSTimeIntervalSince1970]);
    // 时间间隔
    // 对应double类型
    // 计算两个时间对象的时间间隔
    NSTimeInterval interval = [times1 timeIntervalSinceDate:date];
    NSLog(@"%g", interval);

    // 给定一个时间点,判断它和现在时间的时差,如果小于60秒打印几乎同时;如果大于一分钟小于一小时,打印相差几分钟;如果大于一小时打印相差几小时
    // 如何选取一个固定时间点
//    NSDate *times0 = [NSDate dateWithTimeIntervalSince1970:NSTimeIntervalSince1970 + (14 * 365 + 206) * 24 * 3600 + 59600];
//    NSLog(@"%@", times0);
    NSDate *times0 = [NSDate dateWithTimeIntervalSinceNow:1000 + seconds];
    NSLog(@"%@", times0);
    // 定义时间间隔变量储存时差
    NSTimeInterval interval0 = [localDate timeIntervalSinceDate:times0];
    NSLog(@"%g", interval0);
    // 如果时差为负则转为正数
    if (interval0 < 0) {
        interval0 = -interval0;
    }
    NSLog(@"%g", interval0);
    if (interval0 <= 60) {
        NSLog(@"几乎同时");
    } else if (interval0 >= 60 && interval0 <= 3600) {
        NSLog(@"相差%g分钟", interval0 / 60);
    } else {
        NSLog(@"相差%g小时", interval0 / 3600);
    }
    // 这里打印的全为浮点型
    // 日期和字符串互相转换
    // NSDate -> NSString
    // 1.
    NSDate *date1 = [NSDate date];
    // stringWithFormat 最好用的方法 可以把任何类型转换为字符串类型
    NSString *dateStr = [NSString stringWithFormat:@"%@", date1];
    NSLog(@"%@", dateStr);
    // 2.
    // NSDateFormatter 时间格式 标准格式 不能乱改
    // yyyy-MM-dd
    // HH:mm:ss 或者 hh-mm-ss
    // 这里边HH代表24进制 hh代表12小时进制 转化的时候一定要注意
    // 先设置一下时间的格式,要转换的时间要和格式相吻合
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSLog(@"%@", formatter);
    NSDate *date2 = [NSDate date];
    // 通过格式,把制定的时间直接转换成NSString
    // 通过这种方式,系统还会把时间切换成当前所在时区的时间
    NSString *strDate = [formatter stringFromDate:date2];
    NSLog(@"%@", strDate);

    // 字符串 -> NSDate
    NSString *timeStr = @"2015-7-23 17:18:10";
    // 这里通过时间格式将字符串转换为时间类型的时候 会自动将标准格式的字符串所对应的时间切换成零时区的时间
    NSDate *date3 = [formatter dateFromString:timeStr];

    // 前方再次出现高能... 
//    NSDate *date0 = [NSDate date];
//    NSTimeZone *zone0 = [NSTimeZone systemTimeZone];
//    NSInteger seconds0 = [zone0 secondsFromGMTForDate:date0];
//    NSDate *dateNow = [NSDate dateWithTimeIntervalSinceNow:seconds0];
//    NSTimeInterval TimeInterval = [dateNow timeIntervalSinceDate:date0];
//    NSLog(@"%g", TimeInterval);
//    date3 = [NSDate dateWithTimeInterval:TimeInterval sinceDate:date3];
    // 任意给定一个固定时间,我想输出这个时间就这么难吗!!!

    NSLog(@"%@", date3);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值