iOS使用分类(category)实现有序字典

iOS使用分类(category)实现有序字典

什么是分类

OC中为了对类的方法进行扩展,添加了分类的概念。

分类能够做到的事情主要是:即使在你不知道一个类的源码情况下,向这个类添加扩展的方法。

关于字典

OC中字典是无序的,如果想创建有序字典,可以在字典中添加一个有序数组,数组中保存有顺序的key值,按照数组key值的顺序去访问字典就可以得到有序的字典。

实现代码

1.怎么创建分类

在Xcode8中创建分类
Command + N 创建新的文件

iOS使用分类(category)实现有序字典_第1张图片

选择分类(category), 集成的类选择NSDictionary
iOS使用分类(category)实现有序字典_第2张图片

2.实现代码

//在.h文件中声明要使用的方法名
/*****************获取升序键值*********************/
- (NSArray *)nk_ascendingComparedAllKeys;

/*****************获取降序键值*********************/
- (NSArray *)nk_descendingComparedAllKeys;

//在.m文件中将声明的方法实现
- (NSArray *)nk_ascendingComparedAllKeys
{
    NSArray *allKeys = [self keysSortedByValueUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        if ([obj1 integerValue] > [obj2 integerValue])
        {
            return (NSComparisonResult)NSOrderedAscending;
        }
        if ([obj1 integerValue] < [obj2 integerValue])
        {
            return (NSComparisonResult)NSOrderedDescending;
        }
        return (NSComparisonResult)NSOrderedSame;
    }];

    return allKeys;
}

- (NSArray *)nk_descendingComparedAllKeys
{
    NSArray *allKeys = [self keysSortedByValueUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        if ([obj1 integerValue] < [obj2 integerValue])
        {
            return (NSComparisonResult)NSOrderedAscending;
        }
        if ([obj1 integerValue] > [obj2 integerValue])
        {
            return (NSComparisonResult)NSOrderedDescending;
        }
        return (NSComparisonResult)NSOrderedSame;
    }];

    return allKeys;
}

补充说明

类扩展

  • 作用

    1.能为某个类附加额外的属性,成员变量,方法声明
    2.一般类扩展写到.m文件中
    3.一般私有属性写到类扩展

  • 格式

@interface Mitchell()
//属性
//方法
@end
  • 与分类的区别
    1.分类的小括号必须有名字
    2.分类只能扩充方法,不能扩充属性和成员变量
    3.如果分类生命了一个属性,那么分类只会生成这个属性的set、get方法声明,并不会实现

你可能感兴趣的:(iOS)