5.类目,延展,协议

1.类目

NSString+StringMethod.h文件

#import <Foundation/Foundation.h>
@interface NSString (StringMethod)

- (void)sayHi;
- (BOOL)isEqualTwoDate:(NSString *)otherDate;
- (NSString *)appendTwoDate:(NSString *)otherDate;
- (BOOL)isInTimeZone:(NSString *)beginTime end:(NSString *)endTime;
- (NSDate *)getDate;
+ (NSDate *)dateWithStr:(NSString *)dateString;

@end

NSString+StringMethod.m文件

#import "NSString+StringMethod.h"

@implementation NSString (StringMethod)

- (void)sayHi
{
    NSLog(@"hello");
}

- (BOOL)isEqualTwoDate:(NSString *)otherDate
{
    //self是调用这方法的对象   
    if ([[self substringWithRange:NSMakeRange(5, 2)] isEqualToString:[otherDate substringWithRange:NSMakeRange(5, 2)]]) {
        return YES;
    }
    else
    {
        return NO;
    }  
    return 0;
}

- (NSString *)appendTwoDate:(NSString *)otherDate
{
    NSString *str = [otherDate substringFromIndex:11];
    return [self stringByAppendingFormat:@"-%@",str];
}

- (BOOL)isInTimeZone:(NSString *)beginTime end:(NSString *)endTime
{
    NSInteger begin = [[beginTime substringWithRange:NSMakeRange(8, 2)] integerValue];
    NSInteger end = [[endTime substringWithRange:NSMakeRange(8, 2)] integerValue];
    NSInteger time = [[self substringWithRange:NSMakeRange(8, 2)] integerValue];
    if (time >= begin && time <= end) {
        return YES;
    }
    else {
        return NO;
    }
    return 0;
}

- (NSDate *)getDate
{
    NSDateFormatter *fomatter = [[NSDateFormatter alloc] init];
    [fomatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSDate *date = [fomatter dateFromString:self];
    return date;
}

+ (NSDate *)dateWithStr:(NSString *)dateString
{   
    NSDate *date = [NSDate date];
    date = [dateString getDate];
    return date;

}

//下面这种没有在.h文件里面声明的方法叫私有方法,所以只能在.m文件里面使用,外界无法使用
- (void)heihei
{
    NSLog(@"hehe");
}

@end

2.延展(Extension)

延展以@interface开头,然后写延展的类名,类名后加一个(),到@end结束
延展一般是针对自己的类进行操作,能够添加方法和属性,一般延展会写在自己的.m文件中,把一些不想让外部调用的属性(方法)放在延展里,这样属性只能在类的内部使用(私有属性和方法),私有方法也可放在@implementation和@end之间
Student.h文件

#import <Foundation/Foundation.h>

@interface Studnet : NSObject

@property(nonatomic,copy)NSString *stuSex;
- (void)sayHi;

@end

Student.m文件

#import "Studnet.h"

@interface Studnet ()
@property(nonatomic,copy)NSString *name;
-(void)eat;
@end

@implementation Studnet

- (void)create//利用延展的属性
{
    _name = @"你好";
    NSLog(@"%@",_name);
}

-(void)eat//延展方法
{
    NSLog(@"吃饭去");
}

- (void)play//私有方法
{
    NSLog(@"玩耍");
}

- (void)sayHi
{
    [self eat];
    [self play];
}

@end

3.协议代理

Girl.h和Girl.m文件

//1.声明一份协议@protocol  
@protocol MarryDelegate <NSObject>  
@required//必须实现(默认)-->可选择实现:@optional  
- (void)makeMoney;//协议方法是声明  
@end  

@interface Girl : NSObject  
@property(nonatomic,assign)id<MarryDelegate> delegate;//2.设置代理人的属性  
- (void)getMarry;//两个人结婚之后,协议才是正式的生效  
@end  


#import "Girl.h"  

@implementation Girl  
- (void)getMarry  
{  
    //3.让代理人去执行协议里的方法  
    [self.delegate makeMoney];  
}  
@end  

Boy.h和Boy.m文件

#import <Foundation/Foundation.h>  
#import "Girl.h"  
@interface Boy : NSObject<Marry>//4.boy需要签订协议  
@end  

#import "Boy.h"  
@implementation Boy  
- (void)makeMoney//6.实现协议方法里面的方法  
{  
    NSLog(@"挣钱去");  
}  
@end

main.m文件

Boy *liming = [[Boy alloc] init];  
Girl *zhangyun = [[Girl alloc] init];  
//5.设置代理人  
zhangyun.delegate = liming;  
//通过调用结婚的方法来执行内部的协议方法  
[zhangyun getMarry];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值