类的扩展

一 , 类目

系统已经写好的类目: 按照功能对系统的类方法进行区分.
类目从@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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值