iOS使用分类(category)实现有序字典
什么是分类
OC中为了对类的方法进行扩展,添加了分类的概念。
分类能够做到的事情主要是:即使在你不知道一个类的源码情况下,向这个类添加扩展的方法。
关于字典
OC中字典是无序的,如果想创建有序字典,可以在字典中添加一个有序数组,数组中保存有顺序的key值,按照数组key值的顺序去访问字典就可以得到有序的字典。
实现代码
1.怎么创建分类
在Xcode8中创建分类
Command + N 创建新的文件
选择分类(category), 集成的类选择NSDictionary
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方法声明,并不会实现