一 , 类目
系统已经写好的类目: 按照功能对系统的类方法进行区分.
类目从@interface开始,后面是当前类的名字,类名后是分类的功能到@end结束
我们创建的类目,一般是为了把一些系统的类进行功能扩充.
习题
1.输入两个日期 判断两个日期是否在同一个月
//.m文件
-(BOOL)isEqualTwoDate:(NSString *)otherdate
{
return [[self substringWithRange:NSMakeRange(5, 2)] isEqualToString:[otherdate substringWithRange:NSMakeRange(5, 2)]];
}
// main.m文件
NSString *str1 = @"2015-10-24 12:00:00";
NSString *str2 = @"2015-10-30 20:00:00";
BOOL isTrue = [str1 isEqualTwoDate:str2];
if (isTrue) {
NSLog(@"月份相同");
} else {
NSLog(@"月份不同");
}
----------------------------------------------------------
2.输入两个日期,将其拼接成 yyyy-MM-dd HH:mm - HH:mm 的形式
//.m文件
-(NSString *)appendTwoDade:(NSString *)otherDate
{
return [NSString stringWithFormat:@"%@ - %@",[self substringToIndex:16], [otherDate substringWithRange:NSMakeRange(11, 5)]];
}
// main.m文件
NSString *str1 = @"2015-10-24 12:00:00";
NSString *str2 = @"2015-10-30 20:00:00";
[str1 appendTwoDade:str2];
NSLog(@"%@", [str1 appendTwoDade:str2]);
----------------------------------------------------------
3.判断一个时期是否在两个时期区之间
//.m文件
-(bool)isInTimeZone:(NSString *)beginTime
end:(NSString *)endTime
{
return [self compare:beginTime] > 0 && [self compare:endTime] < 0;
}
// main.m文件
NSString *str = @"2015-10-29 12:00:00";
NSString *str1 = @"2015-10-24 12:00:00";
NSString *str2 = @"2015-10-30 20:00:00";
NSLog(@"%d", [str isInTimeZone:str1 end:str2]);
----------------------------------------------------------
4.用类方法和实例方法实现:传过去一个字符串, 返回一个时间的对象NSDate 类型
//.m文件
-(NSDate *)stringToDate
{
NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];
return [formatter dateFromString:self];
}
+(NSDate *)stringToDate:(NSString *)date
{
NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
return [formatter dateFromString:date];
}
// main.m文件
NSString *timeStr=@"2015-7-23 17-18-10";
NSLog(@"%@", [timeStr stringToDate]);
NSLog(@"%@", [NSString stringToDate:timeStr]);
二 , 延展
延展以@interface 开头, 然后写当前延展的类名,类名后加一个();到@end结束
一般延展会写在自己写写的.m文件中, 把一些不想让外部调用的属性放在延展了, 这样这条属性只能在类的内部使用, 外部使用不了,尽最大的可能保护当前类的安全
类目一般都是给看不见.m的系统文件进行扩展,扩展一般是针对自己的类进行操作
流程 (以Student类为例)
//.m文件
@interface Student ()
@property(nonatomic, copy)NSString *name;
@end
@implementation Student
-(void)create
{
_name = @"你好";
NSLog(@"%@", _name);
}
@end
三 , 协议
流程
准备工作:创建两个 Girls 和 Boy 类.
----------------------------------------------------------
// Girls.h 文件
// 1.声明一份协议
// @protocol 协议的关键词
@protocol Marry <NSObject>
// 协议的内容
// 协议方法的声明
// @required 是必须实现的方法 默认是必须是实现的方法
// @optional 是可选择执行的方法
-(void)makeMoney;
@optional
-(void)cook;
@end
@interface Girls : NSObject
// 2.设置代理人的属性
@property(nonatomic, assign)id<Marry>delegate;
// 两个人结婚后,协议才正式的生效
-(void)getMarry;
@end
----------------------------------------------------------
// Girls.m 文件
@implementation Girls
-(void)getMarry
{
// 3.让代理人去执行协议里的方法
[self.delegate makeMoney];
}
@end
----------------------------------------------------------
// boy.h 文件
// 4.引完头文件之后, boy需要签订协议
@interface Boy : NSObject<Marry>
@end
----------------------------------------------------------
// main.m 文件
// 创建两个小人
Boy *yadang = [[Boy alloc] init];
Girls *xiawa = [[Girls alloc] init];
// 5.设置代理人
xiawa.delegate = yadang;
// 通过调用结婚的方法, 来执行内部的协议方法
[xiawa getMarry];
----------------------------------------------------------
// boy.m 文件
@implementation Boy
// 6.实现协议的方法makeMoney;
-(void)makeMoney
{
NSLog(@"买买买");
}
@end