oc77--结构体,NSNumber,NSValue,NSDate,NSCalendar
//
// main.m
// OC中的常用结构体
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // 1.保存坐标的
// NSPoint === CGPoint;别名
CGPoint point = NSMakePoint(, ); // 2.保存尺寸的
// NSSize === CGSize;别名
CGSize size = NSMakeSize(, ); // 3.保存坐标和尺寸
//NSRect === NSRect;别名
CGRect rect = NSMakeRect(, , , ); // 4.在开发中苹果推荐我们使用CG开头的结构体, 也就是说NS开头的结构体一般不用 return ;
}
//
// main.m
// NSNumber
// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { int age = ;
double number= 5.1;
int value = ;
//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 ;
}
//
// 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 = {, "lnj", 1.75};
//NSArray *arr1 = @[p1]; //结构体是不能存到数据里面去的,要用NSValue包装一下。 // 1.利用NSValue包装常用的结构体
CGPoint point = NSMakePoint(, );
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 = {, "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 ;
}
//
// 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:];
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);// 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 ;
}
//
// 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:];
NSLog(@"%ld年%ld月%ld日%ld小时%ld分钟%ld秒钟", cmps3.year, cmps3.month, cmps3.day, cmps3.hour, cmps3.minute, cmps3.second); return ;
}
oc77--结构体,NSNumber,NSValue,NSDate,NSCalendar的更多相关文章
- 黑马程序员_ Objective-c 之Foundation之NSNumber ,NSValue, NSDate
Objective-c 之Foundation之NSNumber ,NSValue, NSDate 1.NSNumber具体用法如下: 在Objective-c中有int的数据类型,那为什么还要使用数 ...
- Foundation框架下的常用类(NSNumber, NSValue, NSDate,NSDateFormatter)
1.NSNumber 将基础数类型数据转成对象数据(比如int float double BOOL long等等) //通过NSNumber将基础数类型数据转成对象数据. NSNumber * i ...
- OC中常见的结构体,以及NSNumber、NSValue、NSDate的使用
常见的结构体 NSPoint和CGPoint NSSize和CGSize NSRect 和 CGRect NSPoint和CGPoint的使用 NSPoint和CGPoint是同义的 typedef ...
- OC NSNumber NSValue
OC NSNumber NSValue iOS的集合对象不可以存储C语言基本类型,所有可以进行装箱和拆箱,来进行OC对象操作. NSNumber包装类 普通初始化 NSNumber * num1 = ...
- OC07 -- 迭代器/NSNumber/NSValue/NSRange/NSSet/NSDate 及相互转换.(杂)
//一: 迭代器 //数组 NSArray *arr=@[@"1",@"2",@"3",@"4",@"5&qu ...
- Objective-C中将结构体与联合体封装为NSValue对象
在Clang 3.7之前,Objective-C已经可以使用类似@100.@YES.@10.5f等字面量表示一个NSNumber对象:用类似@"xxx"的字面量表示一个NSStri ...
- iOS学习14之OC NSNumber + NSValue
1.NSNumber 数值类. 作用:实现基本数据类型与OC对象类型的相互转化. 1> NSNumber创建对象 // 初始化方法 NSNumber *num1 = [[NSNumber all ...
- Foudation框架之一些常用结构体和常用类
表示范围作用的结构体:NSRange: 有三种方式创建新的NSRange: 1.NSRange range: range.location = 17; ...
- Object-c学习之路十(NSNumber&NSValue)
// // main.m // NSNumberAndNSValue // // Created by WildCat on 13-7-26. // Copyright (c) 2013年 wildc ...
- 关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型
关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使 ...
随机推荐
- 关于.Net的强名称(Strong Name)
下面是我在CSDN上发表的<关于.Net的强名称(Strong Name)>,转载于此. 关于.Net的强名称(Strong Name)
- Java_数组1_16.5.12
声明整型数组a: int[] a; 这时,只声明了变量a,还应该使用new运算符创建数组: int[] a=new int [100];(数组长度不要求是一个常量:new int[n]会创建一个长度为 ...
- JavaScipt30(第四个案例)(主要知识点:数组原型链上的一些方法)
承接上文,下面是第四个案例 附上项目链接: https://github.com/wesbos/JavaScript30 const inventors = [ { first: 'Albert', ...
- 06C语言运算符
C语言运算符 算术运算符 运算符 描述 + 把两个操作数相加 - 从第一个操作数中减去第二个操作数 * 把两个操作数相乘 / 分子除以分母 % 取模运算符,整除后的余数 ++ 自增运算符,整数值增加 ...
- top命令的用法
top命令的用法 2018年07月15日 09:50:04 zhuoya_ 阅读数:1858 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/z ...
- 去重 取最大的一条sql
select T.BILL_CODE,t.SCAN_TYPE,t.PIECE,SCAN_SITE,SCAN_MAN, row_number() over(partition by t.bill_cod ...
- Don't make me think [读书笔记] [思维导图]
<Don't make me think>第3版 内容:解析用户心理,在用户模式.扫描设计.导航设计.主页布局.可用性测试,提出了许多的独到观点及建议. 特色:语言轻松.实在.配有许多 ...
- Error LNK2019: unresolved external symbol C++模板类声明与定义链接错误问题
编译器在编译模板时,并不会生成代码,只有遇到实例化的时候才会生成代码.因此,当我们只引用模板声明文件的时候,在实例化的对象时候,模板的定义问文件是不可见的,于是出现链接错误.例如: //A.h #pr ...
- swing中的按钮事件
package pack2; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax ...
- Linux 复习一
第一章 Linux简介和基本操作 一.Linux系统的来源和发展 Linux is a free Unix-type operating system originally created by Li ...