OC语言类的扩展

    // setValue和setObject的区别
    NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"1",@"2",@"3",@"4",@"5",@"6", nil];
    // 当用setValue时,如果前边value里放的是一个空值nil,那么这个方法会被removeForKey代替 即删除一对键值对
    [dic setValue:nil forKey:@"2"];
    NSLog(@"%@", dic);
    // 而setObject并不能实现此功能 如果遇到这种情况(值为nil) 会崩溃
    [dic setObject:nil forKey:@"2"];
    NSLog(@"%@", dic);

类目 category

    // 系统已经写好的类目:按照功能对系统的类方法进行区分
    // 类目从@interface开始,后面是当前类的名字,类名后是分类的功能,到@end结束
    // 我们创建的类目,一般是为了把一些系统的类进行功能扩充
    // 自己加入的NSString方法
    // 这里str赋空值时不会执行此方法 @""可以 里边有元素\0
    NSDate *date1 = [NSDate dateWithString:@"2014-08-14 18:00:00"];
    NSTimeInterval time = 3600;
    date1 = [NSDate dateWithTimeInterval:time sinceDate:date1];
    NSLog(@"%@", date1);


    NSString *str1 = @"2014-08-14 18:00:00";
    NSString *str2 = @"2014-08-14 20:00:00";
    NSString *strTest = [str1 substringFromIndex:12];
    NSLog(@"%@", strTest);
    // 判断两个时间是否相同
    BOOL isTrue = [str1 judgeTwoDate:str2];
    NSLog(@"%d", isTrue);
    // 将两个时间拼接成一个时间段
    NSString *str0 = [str1 appendTwoDate:str2];
    NSLog(@"%@", str0);
    // 判断一个时间是否在这个时间段内
    NSString *str = @"2014-08-14 18:46:30";
    BOOL T = [str judgeInTimeZone:str1 end:str2];
    NSLog(@"%d", T);

    // 将字符串形式转化为NSDate形式输出
    // 这里str一定要是@"yyyy-MM-dd hh:mm:ss"形式
    // hh表示12小时制,HH表示24时制
    NSDate *date = [str stringToDate];
    NSLog(@"%@", date);
    NSDate *date0 = [NSString stringToDate:str];
    NSLog(@"%@", date0);
    /*
     *  NSString+StringMethod.h
     */
@interface NSString (StringMethod)

- (void)sayHi;

// 输入两个日期,判断两个日期是否在同一个月
// 这个方法需要两个参数,第一个参数就是方法的调用者,谁调用了这个方法,那么在这个方法内部,self就是使用方法的那个对象
- (BOOL)judgeTwoDate:(NSString *)anotherDate;

- (NSString *)appendTwoDate:(NSString *)anotherDate;

// 给定两个时间,判断时间是否在这两个时间区间内
- (BOOL)judgeInTimeZone:(NSString *)beginTime
                     end:(NSString *)endTime;

// 传过去一个字符串,返回一个时间的对象NSDate类型
- (NSDate *)stringToDate;
+ (NSDate *)stringToDate:(NSString *)dateStr;

@end    
    /*
     *  NSString+StringMethod.m
     */
@implementation NSString (StringMethod)

- (void)sayHi
{
    NSLog(@"你好");
}

- (BOOL)judgeTwoDate:(NSString *)anotherDate
{
    return [[self substringWithRange:NSMakeRange(5, 2)] isEqualToString:[anotherDate substringWithRange:NSMakeRange(5, 2)]];
}

- (NSString *)appendTwoDate:(NSString *)anotherDate
{
    if ([[self substringToIndex:11] isEqualToString:[anotherDate substringToIndex:11]]) {
        NSString *endDate = [anotherDate substringFromIndex:11];
        NSLog(@"%@", endDate);
        return [NSString stringWithFormat:@"%@ - %@", self, endDate];
    } else {
        return NO;
    }
}

// 这种方法称为私有方法,不让类外部去使用,只能类内部去使用
- (void)shangshuai
{
    NSLog(@"我是商帅");
}

- (BOOL)judgeInTimeZone:(NSString *)beginTime
                     end:(NSString *)endTime
{
    NSString *timeZone = [beginTime appendTwoDate:endTime];
    if ([[self substringToIndex:11] isEqualToString:[timeZone substringToIndex:11]]) {
        NSInteger timeA = [[self substringWithRange:NSMakeRange(11, 2)] intValue];
        NSInteger timeB = [[beginTime substringWithRange:NSMakeRange(11, 2)] intValue];
        NSInteger timeC = [[endTime substringWithRange:NSMakeRange(11, 2)] intValue];
        if (timeA <= timeC && timeA >= timeB) {
            return YES;
        } else {
            return NO;
        }
    } else {
        return NO;
    }
}

- (NSDate *)stringToDate
{
    // 设置格式
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
    return [formatter dateFromString:self];
}
+ (NSDate *)stringToDate:(NSString *)dateStr
{
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
    return [formatter dateFromString:dateStr];
}

@end
    /*
     *  Student.h
     */
@interface Student : NSObject

@property(nonatomic, copy)NSString *stuSex;

@end

延展Extension

    /*
     *  Student.m
     */
// 延展以@interface开头,然后写当前的类名,最后加一个(),到@end结束
// 一般延展会写在自己写的.m文件中,把一些不想让别人外部调用的属性放在延展里,这样这条属性只能在类的内部使用,外部使用不了,尽最大的可能保护当前类的安全
// 类目一般都是给看不见.m的系统文件进行扩展,延展一般都是针对自己的类进行操作
@interface Student ()

@property(nonatomic, copy)NSString *name;

@end


@implementation Student

- (void)create
{
    _name = @"王二麻子";
    NSLog(@"%@", _name);
}

@end

协议Protocol

    /*
     *  girl.h
     */
// 1.声明一份协议
// @protocol 协议的关键词 在@interface的上面书写

@protocol Marry <NSObject>
// 协议的内容
// 协议方法的声明

// @required是必须实现的方法,为系统默认
- (void)makeMoney;

// optional可选择执行的方法
@optional
- (void)cook;

@end


@interface Girl : NSObject

// 2.设置代理人(delegate)的属性
@property(nonatomic, assign)id<Marry>delegate;

// 两个人结婚之后,协议才正式生效
- (void)getMarry;

@end
    /*
     *  girl.m
     */
@implementation Girl

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

@end
#import "Girl.h"
// 4.引完头文件之后,boy需要签订协议

@interface Boy : NSObject<Marry>

- (void)makeMoney;

@end
    // 创建两个对象
    Boy *yadang = [[Boy alloc] init];
    Girl *xiawa = [[Girl alloc] init];

    // 5.设置代理人
    xiawa.delegate = yadang;

    // 通过调用结婚的方法,来执行内部的协议方法
    [xiawa getMarry];   //  与[yadang makeMoney]执行操作相同
    // 如果想更改执行的代理人 只需重新定义一个类 执行4,5,6步即可
@implementation Boy
// 6.实现协议方法makeMoney

- (void)makeMoney
{
    NSLog(@"买买买");
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值