天天看點

Object-C學習(八)——Foundation架構(四)

五、類目Category

a、  類目的定義和類的定義相似。在.h檔案裡聲明,.m檔案裡實作方法。

b、  定義類目的檔案命名規則:類名+類目名稱,如 “NSString + Revert”。

@interface NSString (Extension)

-(BOOL)validateEmail;

@end      
@implemention NSString (Extension)

- (BOOL)validateEmail{
  //實作方法
}      

類名的局限性

         類目還可以覆寫現有類的方法。覆寫後,原始方法則無法調用。

         類目不能為類擴充執行個體屬性。

//聲明類目
@interface NSString (Extension)

//覆寫方法
- (int)intValue;

@end      

六、  數字對象的常用處理方法

NSNumber

//建立NSNumber(包裝基本資料類型)——包裝
NSNumber *intNumber = [NSNumber numberWithInt:100];
NSNumber *floatNumber = [NSNumber numberWithFloat:200];
NSNumber *longNumber = [NSNumber numberWithLong:125125325];
NSNumber *boolNumber = [NSNumber numberWithBool:YES];

NSArray *array = @[ intNumber, floatNumber, longNumber, boolNumber];
NSLog(@” array = %@”,array);

//解包
int intvalue = [intNumber intValue];
float floatvalue = [floatNumber floatValue];
long longvalue = [longNumber longValue];
bool boolvalue = [boolNumber boolValue];

//NSNumber 優化的文法
NSNumber *intNumber1 = @12;//等價于 [NSNumber numberWithInt:100]
NSNumber *floatNumber1 = @2.32f;
NSNumber *longNumber1 = @34903521123;
NSNumber *boolNumber1 = @YES;
NSNumber *charNumber1 = @’s’;      

NSValue——可以對結構體進行包裝,NSValue是NSNumber的父類

NSRange rang = {10,20}
//封包
NSValue *rangValue = [NSValue valueWithRange:rang];

//解包
NSRange rang2 = [rangValue rangeValue];
NSLog(@” (%ld,%ld)”,rang2.location,rang2.lenght);

//對自定義的結構體進行封包
struct WXPoint{
  float x;
  float y;
}

struct WXPoint p = {50,100};
NSValue *pointValue = [NSValue value:&p withObjCType:@encode(struct WXPoint)];

//對自定義的結構體進行解包
struct WXPoint p2;
[pointValue getValue:&p2];
NSLong(@”p2.x=%f,p2.y=%f”, p2.x,p2.y);      

NSNULL的使用

NSArray *nilarray = @[nil,nil,nil];//錯誤,nil不能夠存入到數組或字典中

NSNull *n1 = [NSNull null];
NSNull *n2 = [NSNull null];
NSArray *nullarray = @[@”zhangsan”,n2];
NSLog(@”nullarray = %@” ,nullarray);

for (id item in nullarray){
  if(item == [NSNull]){
    NSLog(@”此位置是為空的元素”);
}
}      

日期類NSDate

//建立日期

NSDate *date1 = [NSDate date];
NSDate *date2 = [[NSDate alloc] init];
NSLog(@”date2:%@”,date2);

//在目前時間點的基礎上累加一個數值之後的日期,機關是秒
NSDate *date3 = [NSDate dateWithTimeIntervalSinceNow:24*60*60]; 
NSLog(@”date3:%@”,date3);

NSDate *date4 = [NSDate dateWithTimeIntervalSinceNow:-24*60*60]; 
NSLog(@”date4:%@”,date4);

//時間戳:某一日期到1970年的秒數大小,稱為該日期的時間戳。
NSDate *date1970 = [NSDate dateWithTimeTntervalSince1970:0];
NSLog(@”date1970:%@”,date1970); 

NSDate *time = [NSDate dateWithTimeTntervalSince1970:11025412687];
NSLog(@” time:%@”, time);

//擷取日期的時間戳
NSDate *timeNow = [NSDate date];
NSTimeInterval time1970 = [timeNow timeIntervalSince1970]
NSLog(@”time1970=%lf”,time1970);

//日期的比較
//1,通過調用日期對象的compare方法進行比較
NSComparisonResult result = [date3 compare:date2];
if (result == NSOrderedAscending) {
  NSLog(@”date3 > date2”);
}else {
  NSLog(@”date3 < date2”);
}

//2.通過比較時間戳
if ([date3 timeIntervalSince1970] > [date2 timeIntervalSince1970]) {
  NSLog(@”date3 > date2”);
} else {
  NSLog(@”date3 < date2”);
}      

 日期格式化類NSDateFormatter

//日期對象 - 字元串

NSDate *nowDate = [NSDate date];
NSString *timestr = nowDate.description;
NSLog(@”%@”,timestr);

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
//設定日期格式
[dateFormatter setDateFormat:@”yyyy年MM月dd日 HH時mm分ss秒”];
NSString *dateString = [dateFormatter stringFromDate:nowDate];
NSLog(@”目前時間:%@”,dateString);

//設定時區
NSTimeZon *time = [NSTimeZone timeZoneWithName:@”America/New_York”];
//将時區配置給dateFormatter對象
[dateFormatter setTimeZone:timezone];

NSString *datestring2 = [dateFormatter stringFromDate:nowDate];
NSLog(@”格式化後2:%@”,datestring2);


//字元串--日期對象
NSString *str = @”2015年03月22日 17:06:22”;

NSDateFormatter * dateFormatter2 = [[NSDateFormatter alloc] init];
[dateFormatter2 setDateFormat:@”yyyy年MM月dd日 HH時mm分ss秒”];
NSDate *date11 = [dateFormatter2 dateFromString:str]
NSLog(@”%@”,date11);      

轉載于:https://www.cnblogs.com/ihoou/p/4729477.html