基础概念:
OC的数值类型是什么?
1.API应用程序编程接口(Application Programming Interface):是一些预先定义的函数。是一套用来控制系统的各个部件的外观和行为的预先定义的系统函数。
2.Cocoa:Cocoa是苹果公司为Mac OS X所创建的原生面向对象的API,是Mac OS X上五大API之一(其它四个是Carbon、POSIX、X11和Java)。
Cocoa Touch:Cocoa Touch是多个框架的集合,其中最重要的是Foundation框架和UIKit。前者是处理字符串数据等内容数据,其中包含了大量常用的API;后者是处理界面外观的框架。不同框架作用不同。
3.Fundation:Foundation是一种框架,是许多类的集合。Foundation类层次的根是NSObject类,它和NSObject及NSCopying协议一起)定义了基本的对象属性和行为。Foundation框架的剩余部分由几组相互关联的类和一些独立的类组成。有一些代表基本数据类型的类,如字符串、字节数组、用于存储其它对象的集合类;一些代表系统信息的类,如日期类;还有一些代表系统实体的类,比如端口、线程、和进程。
在OC阶段我们主要学习的是Foundation框架,在Foundation框架中,有一些重要的数据类型,我们将它主要分为两种:typedef类型和对象类型。
1.typedef类型
(1).简单数值类型
NSInteger
CGFloat
(2).结构体类型
NSPoint
NSRect
NSSize
NSRange
2.对象类型(要加*):
(1).简单数值类型
NSNumber
NSValue
NSString
(2).集合
NSArray
NSDictionary
NSMutablearray
NSMutabledictionary
我们可以通过 封装 将typedef类型 -> 对象类型,也可通过 解封装 将对象类型 ->typedef类型。
注意:封装只是能转成NSNumber、NSValue,要将(数字NSInteger)转化成(字符串NSString)要使用特殊的方法.
- typdef类型 与 对象类型 之间的转换
#pragma mark - 01. typdef类型 与 对象类型 之间的转换
//typdef结构体类型的创建与打印
//1.创建结构体数据类型:NSMake...
NSPoint point = NSMakePoint(1.2, 1.3);//用函数将其转换成对象类型
NSRect rect = NSMakeRect(1, 1, 100, 11);
NSRange rangeEasy = {3,3};
NSRange range = NSMakeRange(3, 3);
NSSize size = NSMakeSize(100, 100);
//注意:打印typdef类型使用 宏定义方法NSStringFrom....
NSLog(@"point = %@",NSStringFromPoint(point));
NSLog(@"rect = %@",NSStringFromRect(rect));
NSLog(@"range = %@",NSStringFromRange(range));
NSLog(@"size = %@",NSStringFromSize(size));
#pragma mark - 01.1封装typdef类型数据
// 封装:typedef类型 -> 对象类型 NSNumber、NSValue、NSString
//NSnumber:封装typedef简单数据类型
NSInteger integer = 10 ;
//1.快速封装法
NSNumber *integerToNS1 = @(integer);
integerToNS1 = @20;
//2.使用NSNumber类方法:numberWith...
NSNumber *integerToNS2 = [NSNumber numberWithInteger:integer];
//NSValue:封装typedef结构体数据类型
//2.将结构体转换成对象:[NSValue valueWith...]
NSValue *pointToValue = [NSValue valueWithPoint:point];
NSValue *rectToValue = [NSValue valueWithRect:rect];
//NSString:将数字封装成字符串对象
//使用类方法(+)stringWithFormat
NSInteger integer2 = 13;
NSString *integerToString = [NSString stringWithFormat:@"%ld",integer2];
#pragma mark - 01.2 解封装 (实例方法)Value:返回类型多样,且都为typdef类型
//解封装:typedef数据类型 <- 对象类型
//[对象名 .....Value] 例:integerValue
//解封装NSnumber类型
NSInteger nsToInteger = [integerToNS2 integerValue];//floatValue/doubleValue
//解封装NSValue类型
NSPoint point1 = [pointToValue pointValue];
//解封装NSString类型
NSInteger stringToInteger = [integerToString integerValue];
#pragma mark - 01.3 NSString 与 NSNumber 之间的转换
//NSNumberFormatter格式转换器
NSNumber *number = @10;
//创建转换器
NSNumberFormatter *formater = [[NSNumberFormatter alloc]init];
//设置格式
[formater setNumberStyle:NSNumberFormatterNoStyle];//1.调方法
formater.numberStyle = NSNumberFormatterNoStyle;//2.点语法
//通过转换器调用方法
NSString *numberToString = [formater stringFromNumber:number];//字符对象转数字对象
NSNumber *stringToNumber = [formater numberFromString:numberToString];//数字对象转字符对象
//附加:NSNumberFormatter类有个属性numberStyle,它是一个枚举型,设置不同的值可以输出不同的数字格式。各个枚举对应输出数字格式的效果如下:
enum {
NSNumberFormatterNoStyle = kCFNumberFormatterNoStyle,
// 123456789
NSNumberFormatterDecimalStyle = kCFNumberFormatterDecimalStyle,
// 123,456,789
NSNumberFormatterCurrencyStyle = kCFNumberFormatterCurrencyStyle,
// ¥123,456,789.00
NSNumberFormatterPercentStyle = kCFNumberFormatterPercentStyle,
// -539,222,988%
NSNumberFormatterScientificStyle = kCFNumberFormatterScientificStyle,
// 1.23456789E8
NSNumberFormatterSpellOutStyle = kCFNumberFormatterSpellOutStyle
// 一亿二千三百四十五万六千七百八十九
};
// 其中第三项和最后一项的输出会根据系统设置的语言区域的不同而不同。
2.NSString
#pragma mark - 02. NSString
#pragma mark - 02.1 单个NSString增、删、查、改
//增 - 实例方法(NSString *)stringAppending..
NSString *stringAdd = @"hello";
//一般的字符串拼接方法
NSString *appendString =[stringAdd stringByAppendingString:@" world"];
NSLog(@"appendStr = %@",appendString);
//格式字符串的拼接方法
NSString *newAppendString = [stringAdd stringByAppendingFormat:@"%@",@" newWorld"];
NSLog(@"appendStr = %@",newAppendString);
//+类方法 : 初始化拼接 - stringWithFormat
NSString *append1String = [NSString stringWithFormat:@"%@%@",stringAdd,@" world"];
NSLog(@"appendStr = %@",append1String);
//删 - 实例方法(NSString *)subString..
NSString *stringSub = [[NSString alloc] initWithFormat:@"hello world"];
//截取 "删除" 前面6个(下标0 ~ 5)
NSLog(@"%@",[stringSub substringFromIndex:6]);
//截取 "删除" 后面5个(下标从最后往前5个)
NSLog(@"%@",[stringSub substringToIndex:5]);
//从下标为3的地方开始截取 "获得" (包括下标为3的字符)4个字符
NSLog(@"%@",[stringSub substringWithRange:NSMakeRange(3, 4)]);
//注意:因为NSString是不可变字符串,所以以上的3个实例方法都有返回值返回一个(NSString *)类型的值
//查 - 实例方法 : (BOOL)hasPrefix(头)、(BOOL)hasSuffix(尾)、(NSRange)rangeOfString(范围)
NSString *stringSearch = [NSString stringWithFormat:@"www.baidu.com"];
//查询头部
BOOL flagHead = [stringSearch hasPrefix:@"www."];
NSLog(@"%hhd",flagHead);
//查询尾部
BOOL flagTail = [stringSearch hasSuffix:@".com"];
NSLog(@"%hhd",flagTail);
//查找字符串的位置:(NSRange)rangeOfString
NSRange rangeOfSearch = [stringSearch rangeOfString:@"baidu"];
NSLog(@"rangeOfSearch = %@",NSStringFromRange(rangeOfSearch));
// if (range.location != NSNotFound && range.length > 0) {
// NSStringFromRange(range);
// }else{
// NSLog(@"NOT Find");
// }
//改 - 实例方法 : (NSString *)stringByREplacing.....
NSString *stringReplace = [NSString stringWithFormat:@"www.baidu.com"];
NSLog(@"%@",[stringReplace stringByReplacingCharactersInRange:NSMakeRange(4, 5) withString:@"00"]);
#pragma mark - 02.2 NSString之间的比较 :(BOOL)isEqualTo... 、(NSComparisonResult)compare
NSString *string1 = @"abc";
NSString *string2 = @"Abc";
BOOL flagOfEqual = [string1 isEqual:string2];
NSLog(@"%hhd",flagOfEqual);
NSComparisonResult result = [string1 compare:string2];
NSLog(@"%ld",result);
if (result == NSOrderedAscending) {
NSLog(@"前比后小");
}else if(result == NSOrderedSame){
NSLog(@"一样大");
}else{
NSLog(@"后比前小");
}
/*
NSOrderedAscending = -1L,升序
NSOrderedSame, 相等
NSOrderedDescending 降序
*/
#pragma mark - 03.3 可变字符串NSMutableString
//常规初始化方法
NSMutableString *mutableString = [[NSMutableString alloc] initWithFormat:@"hello"];
//便利构造初始化
NSMutableString *mutableString1 = [NSMutableString stringWithFormat:@"world"];
// 增:从下标为2的地方开始增加(增加后0的下标为2)
[mutableString1 insertString:@"012" atIndex:2];
NSLog(@"%@",mutableString1);
// 删:从下标为2的地方开始删除3个数(包括下标2 的那个字符)
[mutableString1 deleteCharactersInRange:NSMakeRange(2, 3)];
NSLog(@"%@",mutableString1);
// 改:替换helloworls
[mutableString replaceCharactersInRange:NSMakeRange(2, 3) withString:@"132"];
NSLog(@"%@",mutableString);
3.NSDate
1.NSDate对象用来表示一个具体的时间点。
2.NSDate是一个类簇,我们所使用的NSDate对象,都是NSDate的私有子类的实体。
3.NSDate存储的是GMT时间,使用的时候会根据 当前应用 指定的 时区 进行时间上的增减,以供计算或显示。
#pragma mark - 03. NSDate
//1.计算当前时间
NSDate *date = [NSDate date];
NSLog(@"todayInGreen = %@",date);
//时间不对,改为东八区的时间,即加8个小时
date = [NSDate dateWithTimeInterval:8*60*60 sinceDate:date];
NSLog(@"today = %@",date);
//2.计算明天此时的时间
NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:24*60*60];
NSLog(@"tomorrow = %@",tomorrow);
//3.计算昨天此时的时间
NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-24*60*60];
NSLog(@"yesterday = %@",yesterday);
//4.计算从1970年开始过了100000000000秒 的是哪一天
NSDate *someDay = [NSDate dateWithTimeIntervalSince1970:10000000000];
NSLog(@"someDay = %@",someDay);
//5.获取时间的间隔 interval n.间隔
NSTimeInterval timeInterval = [tomorrow timeIntervalSinceDate:yesterday];
NSLog(@"timeTeavel = %lf",timeInterval);
//6.比较日期的早晚
//1).返回较早的日期
NSDate *earlerDay = [yesterday earlierDate:tomorrow];
NSLog(@"earlerDay = %@",earlerDay);
//2).返回较晚的日期
NSDate *laterDay = [yesterday laterDate:tomorrow];
NSLog(@"laterDay = %@",laterDay);
//7.NSString->NSDate*************************************************NSDateFomatter
/*
日期格式 :
HH 表示24小时制 hh表示十二小时制
MM 表示月份 mm 表示分钟
dd 表示当月的天数 DD表示当天处于本年第几天
ss 表示秒数
如果年份给两个yy,则只显示年份的后两位,如果给其他个数的y,都是显示完整的年份.
例如:MM等 如果给两位,则月份如果是一位时,前面补0.
*/
//创建时间转换器
NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
//设置转换格式
[dateformatter setDateFormat:@"YYYYMMdd"];
//设置NSDate变量来接收转换后的数据
NSDate *newDate = [dateformatter dateFromString:@"19940901"];
NSLog(@"newDate = %@",newDate);
//新时间还是格林威治的时间,要转换为北京时间需要再加8个小时
newDate = [NSDate dateWithTimeInterval:8*60*60 sinceDate:newDate];
NSLog(@"newDate = %@",newDate);
//8.NSString->NSDate
//创建时间转换器
NSDateFormatter *dateformatter1 = [[NSDateFormatter alloc] init];
//设置转换格式
[dateformatter1 setDateFormat:@"yyyy-MM-dd"];
//设置NSString变量来接收转换的数据
NSString *dateString = [dateformatter1 stringFromDate:tomorrow];
NSLog(@"dateString = %@",dateString);