// // main.m // OC中的常用结构体 // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // 1.保存坐标的 // NSPoint === CGPoint;别名 CGPoint point = NSMakePoint(10, 20); // 2.保存尺寸的 // NSSize === CGSize;别名 CGSize size = NSMakeSize(100, 50); // 3.保存坐标和尺寸 //NSRect === NSRect;别名 CGRect rect = NSMakeRect(10, 20, 100, 50); // 4.在开发中苹果推荐我们使用CG开头的结构体, 也就是说NS开头的结构体一般不用 return 0; }
// // main.m // NSNumber // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { int age = 10; double number= 5.1; int value = 6; //NSArray *arr1 = @[age, number, value]; //NSLog(@"arr = %@", arr1); // 1.将基本数据类型转换为对象类型,基本数据类不能存储到数组和字典中,要将基本数据类型转换为对应的类类型。 NSNumber *ageN = [NSNumber numberWithInt:age]; NSNumber *numberN = [NSNumber numberWithDouble:number]; NSNumber *valueN = [NSNumber numberWithInt:value]; NSArray *arr = @[ageN, numberN, valueN]; NSLog(@"arr = %@", arr); // 2.将对象类型转换为基本数据类型 int temp1 = [ageN intValue]; double temp2 = [numberN doubleValue]; NSLog(@"%f", temp2); // 3.基本数据类型转换对象类型简写 // 注意: 如果传入的是变量那么必须在@后面写上(), 如果传入的常量, 那么@后面的()可以省略 NSNumber *temp3 = @(temp2); NSNumber *temp4 =@10.10; //转换层对象类型的NSNumber NSLog(@"%@", temp3);//5.1 return 0; }
// // main.m // NSValue,包装数据类型到数组和字典。 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { typedef struct{ int age; char *name; double _height; }Person1; Person1 p1 = {30, "lnj", 1.75}; //NSArray *arr1 = @[p1]; //结构体是不能存到数据里面去的,要用NSValue包装一下。 // 1.利用NSValue包装常用的结构体 CGPoint point = NSMakePoint(10, 20); NSValue *value = [NSValue valueWithPoint:point]; NSArray *arr2 = @[value]; NSLog(@"%@", arr2);//("NSPoint: {10, 20}") // 2.利用NSValue包装自定义的结构体 typedef struct{ int age; char *name; double height; }Person; Person p = {30, "lnj", 1.75}; // valueWithBytes: 接收一个指针, 需要传递需要包装的结构体的变量的地址 // objCType: 需要传递需要包装的数据类型 NSValue *pValue = [NSValue valueWithBytes:&p objCType:@encode(Person)]; NSArray *arr = @[pValue]; NSLog(@"%@", arr);//("<1e000000 00000000 76380000 01000000 00000000 0000fc3f>") // 从NSValue中取出自定义的结构体变量 Person res; [pValue getValue:&res]; NSLog(@"age = %i, name = %s, height = %f", res.age, res.name, res.height);//age = 30, name = lnj, height = 1.750000 return 0; }
// // main.m // NSDate // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // 1.NSDate创建和基本概念 // 只要是通过date方法创建的时间对象, 对象中就保存了当前的时间 NSDate *now = [NSDate date]; NSLog(@"now = %@", now);//Sun Aug 27 21:32:15 2017 // 在now的基础上追加多少秒 NSDate *date1 = [now dateByAddingTimeInterval:10]; NSLog(@"date = %@", date1);// Sun Aug 27 21:32:25 2017 // 1.获取当前所处的时区 NSTimeZone *zone = [NSTimeZone systemTimeZone];//@"Asia/Shanghai" // 2.获取当前时区和指定时区的时间差 NSInteger seconds = [zone secondsFromGMTForDate:now]; NSLog(@"seconds = %lu", seconds);//28800 NSDate *newDate = [now dateByAddingTimeInterval:seconds]; NSLog(@"newDate = %@", newDate);// Mon Aug 28 05:32:15 2017 // 2.时间格式化 NSDate --> NSString // xxxx年xx月xx日 xx小时xx分钟xx秒 // xxxx/xx/xx xx/xx/xx // xx/xx/xxxx xx/xx/xx NSDate *now1 = [NSDate date]; // 创建一个时间格式化对象 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // 告诉时间格式化对象, 按照什么样的格式来格式化时间 // yyyy 年 // MM 月 // dd 日 // HH 24小时 hh 12小时 // mm 分钟 // ss 秒钟 // Z 时区 // formatter.dateFormat = @"yyyy年MM月dd日 HH时mm分ss秒 Z"; formatter.dateFormat = @"yyyy-MM-dd HH-mm-ss"; // 利用时间格式化对象对时间进行格式化 NSString *res = [formatter stringFromDate:now1]; NSLog(@"res = %@", res);//2017-08-27 21-35-35 // NSString --> NSDate NSString *str1 = @"2015-06-29 07:05:26 +0000"; NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init]; // 注意: 如果是从NSString格式化为NSDate, 那么dateFormat的格式, 必须和字符串中的时间格式一致, 否则可能转换失败 formatter1.dateFormat = @"yyyy-MM-dd HH:mm:ss Z"; NSDate *date2 = [formatter1 dateFromString:str1];//Mon Jun 29 15:05:26 2015 NSLog(@"%@", date2); return 0; }
// // main.m // NSCalendar #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // 1.获取当前时间的年月日时分秒 // 获取当前时间 NSDate *now = [NSDate date]; NSLog(@"now = %@", now); // 日历 NSCalendar *calendar1 = [NSCalendar currentCalendar]; // 利用日历类从当前时间对象中获取 年月日时分秒(单独获取出来) // components: 参数的含义是, 问你需要获取什么? // 一般情况下如果一个方法接收一个参数, 这个参数是是一个枚举 , 那么可以通过|符号, 连接多个枚举值 NSCalendarUnit type = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; NSDateComponents *cmps = [calendar1 components:type fromDate:now]; NSLog(@"year = %ld", cmps.year); NSLog(@"month = %ld", cmps.month); NSLog(@"day = %ld", cmps.day); NSLog(@"hour = %ld", cmps.hour); NSLog(@"minute = %ld", cmps.minute); NSLog(@"second = %ld", cmps.second); // 2.比较两个时间之间的差值, 比较相差多少年多少月多少日多少小时多少分钟多少秒 // 2.1过去的一个时间 NSString *str2 = @"2015-06-29 07:05:26 +0000"; NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init]; formatter2.dateFormat = @"yyyy-MM-dd HH:mm:ss Z"; NSDate *date2 = [formatter2 dateFromString:str2]; // 2.2当前的时间 NSDate *now2 = [NSDate date]; NSLog(@"date = %@", date2); NSLog(@"now = %@", now2); // 2.3比较两个时间 NSCalendar *calendar3 = [NSCalendar currentCalendar]; NSCalendarUnit type3 = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond; NSDateComponents *cmps3 = [calendar3 components:type fromDate:date2 toDate:now2 options:0]; NSLog(@"%ld年%ld月%ld日%ld小时%ld分钟%ld秒钟", cmps3.year, cmps3.month, cmps3.day, cmps3.hour, cmps3.minute, cmps3.second); return 0; }