您的位置:首页 > 产品设计 > UI/UE

oc77--结构体,NSNumber,NSValue,NSDate,NSCalendar

2017-08-27 21:51 447 查看
//
//  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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: