NSArray的Category

前言

项目中自己通过各种渠道及结合项目的经验整理了一套自己的工具包,里面有各种Category,及封装的方法,方便项目使用,今天先分享一下NSarray的Category。

NSArray+LSCore.h

#import <Foundation/Foundation.h>

@interface NSArray (LSCore)

#pragma mark - 取值
- (id)firstObject;
- (id)randomObject; #pragma mark - 排序
- (NSArray *)shuffledArray;
- (NSArray *)reversedArray;
- (NSArray *)uniqueArray;
- (NSArray *)arraySorting:(NSString *)parameters ascending:(BOOL)ascending; #pragma mark - 安全操作
-(id)objectWithIndex:(NSUInteger)index; - (NSString*)stringWithIndex:(NSUInteger)index;
- (NSNumber*)numberWithIndex:(NSUInteger)index;
- (NSArray*)arrayWithIndex:(NSUInteger)index;
- (NSDictionary*)dictionaryWithIndex:(NSUInteger)index;
- (NSInteger)integerWithIndex:(NSUInteger)index;
- (NSUInteger)unsignedIntegerWithIndex:(NSUInteger)index;
- (BOOL)boolWithIndex:(NSUInteger)index; - (int16_t)int16WithIndex:(NSUInteger)index;
- (int32_t)int32WithIndex:(NSUInteger)index;
- (int64_t)int64WithIndex:(NSUInteger)index; - (char)charWithIndex:(NSUInteger)index;
- (short)shortWithIndex:(NSUInteger)index;
- (float)floatWithIndex:(NSUInteger)index;
- (double)doubleWithIndex:(NSUInteger)index; - (CGFloat)CGFloatWithIndex:(NSUInteger)index;
- (CGPoint)pointWithIndex:(NSUInteger)index;
- (CGSize)sizeWithIndex:(NSUInteger)index;
- (CGRect)rectWithIndex:(NSUInteger)index; @end

NSArray+LSCore.m

#import "NSArray+LSCore.h"

@implementation NSArray (LSCore)
#pragma mark - 取值
/**
* 获取数组的第一个元素
*
* @return 取得的元素
*/
- (id)firstObject {
if ([self count] > 0) {
return [self objectAtIndex:0];
} else {
return nil;
}
} /**
* 随机取数组里的一个元素
*
* @return 随机取得的元素
*/
- (id)randomObject {
if ([self count] > 0) {
int index = arc4random() % [self count];
id object = [self objectAtIndex:index];
return object;
} else {
return nil;
}
} #pragma mark - 排序
/**
* 重组数组(打乱顺序)
*
* @return 重组之后的数组
*/
- (NSArray *)shuffledArray {
NSMutableArray *array = [NSMutableArray arrayWithCapacity:[self count]];
NSMutableArray *copy = [self mutableCopy];
while ([copy count] > 0)
{
int index = arc4random() % [copy count];
id objectToMove = [copy objectAtIndex:index];
[array addObject:objectToMove];
[copy removeObjectAtIndex:index];
}
return array;
} /**
* 数组倒序
*
* @return 将数组倒序后得到的数组
*/
- (NSArray *)reversedArray {
NSArray *reversedArray = [[self reverseObjectEnumerator] allObjects];
return reversedArray;
} /**
* 数组去除相同的元素,并获得新的array
*
* @return 去除相同元素后的array
*/
- (NSArray *)uniqueArray {
NSSet *set = [NSSet setWithArray:self];
NSArray *array = [[NSArray alloc] initWithArray:[set allObjects]];
return array;
} /**
* 根据关键词 对array的内容进行排序,并返回排序后的array
*
* @param parameters 关键词
* @param ascending YES 升序 NO 降序
*
* @return 经过排序后的数组
*/
- (NSArray *)arraySorting:(NSString *)parameters ascending:(BOOL)ascending {
NSSortDescriptor*sorter=[[NSSortDescriptor alloc]initWithKey:parameters ascending:ascending];
NSMutableArray *sortDescriptors=[[NSMutableArray alloc]initWithObjects:&sorter count:1];
NSArray *sortArray=[self sortedArrayUsingDescriptors:sortDescriptors];
return sortArray;
} #pragma mark - 安全操作
/**
* 获取下标为index的对象
*
* @param index 下标
*
* @return 获得的对象
*/
-(id)objectWithIndex:(NSUInteger)index {
if (index <self.count) {
return self[index];
}else{
return nil;
}
} /**
* 获取下标为index的字符串,不存在返回空,能转为string的转,不能的返回nil
*
* @param index 下标
*
* @return 获得的字符串
*/
- (NSString*)stringWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index];
if (value == nil || value == [NSNull null])
{
return @"";
}
if ([value isKindOfClass:[NSString class]]) {
return (NSString*)value;
}
if ([value isKindOfClass:[NSNumber class]]) {
return [value stringValue];
} return nil;
} /**
* 获取下标为index的number,不存在返回空,能转为number的转,不能的返回nil
*
* @param index 下标
*
* @return 获得的number
*/
- (NSNumber*)numberWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index];
if ([value isKindOfClass:[NSNumber class]]) {
return (NSNumber*)value;
}
if ([value isKindOfClass:[NSString class]]) {
NSNumberFormatter * f = [[NSNumberFormatter alloc] init];
[f setNumberStyle:NSNumberFormatterDecimalStyle];
return [f numberFromString:(NSString*)value];
}
return nil;
} /**
* 获取下标为index的array,不存返回nil
*
* @param index 下标
*
* @return 获得的array
*/
- (NSArray*)arrayWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index];
if (value == nil || value == [NSNull null])
{
return nil;
}
if ([value isKindOfClass:[NSArray class]])
{
return value;
}
return nil;
} /**
* 获取下标为index的Dictionary,不存返回nil
*
* @param index 下标
*
* @return 获得的Dictionary
*/
- (NSDictionary*)dictionaryWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index];
if (value == nil || value == [NSNull null])
{
return nil;
}
if ([value isKindOfClass:[NSDictionary class]])
{
return value;
}
return nil;
} /**
* 获取下标为index的integer,不存返回0
*
* @param index 下标
*
* @return 获得的integer
*/
- (NSInteger)integerWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index];
if (value == nil || value == [NSNull null])
{
return 0;
}
if ([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]])
{
return [value integerValue];
}
return 0;
} /**
* 获取下标为index的unsignedInteger,不存返回0
*
* @param index 下标
*
* @return 获得的unsignedInteger
*/
- (NSUInteger)unsignedIntegerWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index];
if (value == nil || value == [NSNull null])
{
return 0;
}
if ([value isKindOfClass:[NSString class]] || [value isKindOfClass:[NSNumber class]])
{
return [value unsignedIntegerValue];
}
return 0;
} /**
* 获取下标为index的bool,不存返回NO
*
* @param index 下标
*
* @return 获得的bool
*/
- (BOOL)boolWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; if (value == nil || value == [NSNull null])
{
return NO;
}
if ([value isKindOfClass:[NSNumber class]])
{
return [value boolValue];
}
if ([value isKindOfClass:[NSString class]])
{
return [value boolValue];
}
return NO;
} /**
* 获取下标为index的int16,不存返回0
*
* @param index 下标
*
* @return 获得的int16
*/
- (int16_t)int16WithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; if (value == nil || value == [NSNull null])
{
return 0;
}
if ([value isKindOfClass:[NSNumber class]])
{
return [value shortValue];
}
if ([value isKindOfClass:[NSString class]])
{
return [value intValue];
}
return 0;
} /**
* 获取下标为index的int32,不存返回0
*
* @param index 下标
*
* @return 获得的int32
*/
- (int32_t)int32WithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; if (value == nil || value == [NSNull null])
{
return 0;
}
if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]])
{
return [value intValue];
}
return 0;
} /**
* 获取下标为index的int64,不存返回0
*
* @param index 下标
*
* @return 获得的int64
*/
- (int64_t)int64WithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; if (value == nil || value == [NSNull null])
{
return 0;
}
if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]])
{
return [value longLongValue];
}
return 0;
} /**
* 获取下标为index的charValue,不存返回0
*
* @param index 下标
*
* @return 获得的charValue
*/
- (char)charWithIndex:(NSUInteger)index { id value = [self objectWithIndex:index]; if (value == nil || value == [NSNull null])
{
return 0;
}
if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]])
{
return [value charValue];
}
return 0;
} /**
* 获取下标为index的intValue,不存返回0
*
* @param index 下标
*
* @return 获得的intValue
*/
- (short)shortWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; if (value == nil || value == [NSNull null])
{
return 0;
}
if ([value isKindOfClass:[NSNumber class]])
{
return [value shortValue];
}
if ([value isKindOfClass:[NSString class]])
{
return [value intValue];
}
return 0;
} /**
* 获取下标为index的floatValue,不存返回0
*
* @param index 下标
*
* @return 获得的floatValue
*/
- (float)floatWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; if (value == nil || value == [NSNull null])
{
return 0;
}
if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]])
{
return [value floatValue];
}
return 0;
} /**
* 获取下标为index的doubleValue,不存返回0
*
* @param index 下标
*
* @return 获得的doubleValue
*/
- (double)doubleWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; if (value == nil || value == [NSNull null])
{
return 0;
}
if ([value isKindOfClass:[NSNumber class]] || [value isKindOfClass:[NSString class]])
{
return [value doubleValue];
}
return 0;
} /**
* 获取下标为index的CGFloat
*
* @param index 下标
*
* @return 获得的CGFloat
*/
- (CGFloat)CGFloatWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; CGFloat f = [value doubleValue]; return f;
} /**
* 获取下标为index的point
*
* @param index 下标
*
* @return 获得的point
*/
- (CGPoint)pointWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; CGPoint point = CGPointFromString(value); return point;
} /**
* 获取下标为index的size
*
* @param index 下标
*
* @return 获得的size
*/
- (CGSize)sizeWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; CGSize size = CGSizeFromString(value); return size;
} /**
* 获取下标为index的rect
*
* @param index 下标
*
* @return 获得的rect
*/
- (CGRect)rectWithIndex:(NSUInteger)index {
id value = [self objectWithIndex:index]; CGRect rect = CGRectFromString(value); return rect;
} @end

NSArray的Category的更多相关文章

  1. 将一个字典内的内value转换为集合:返回一个数组,此数组中包含输入字典的键值对中的数组的所有元素(为NSArray添加category)

    - (NSArray *)testa:(NSDictionary *)dic { NSMutableArray *arr_M = [NSMutableArray array]; // 1.遍历每一个元 ...

  2. 一段可以清理NSArray中的空对象的代码(递归)

    - (NSArray *)clearAllNullObject{ NSMutableArray *array = [self mutableCopy]; ;i < array.count;i++ ...

  3. Objective-c防止数组越界而崩溃(全局效果)

    数组越界其实是很基本的问题,但是解决起来除了count的判断,还有每个调用的时候都要去判断一遍 对于不明确的数据总会有崩溃的风险 然而 每次调用都判断 那是太累了 so ..runtime&c ...

  4. NSString,NSArray,NSNumber等类的继承问题

    问题引入,我想给NSString类扩展一些新的方法.在Objective-C中可以有两种方法,一是继承,二是类别.本文先不讨论类别,我们用继承的方法试一下: @interface StringEx : ...

  5. App开发流程之使用分类(Category)和忽略编译警告(Warning)

    Category使得开发过程中,减少了继承的使用,避免子类层级的膨胀.合理使用,可以在不侵入原类代码的基础上,写出漂亮的扩展内容.我更习惯称之为"分类". Category和Ext ...

  6. 【原】iOS动态性(一):动态添加属性的方法——关联(e.g. 向Category添加属性)

    想到要如何为所有的对象增加实例变量吗?我们知道,使用Category可以很方便地为现有的类增加方法,但却无法直接增加实例变量.不过从Mac OS X v10.6开始,系统提供了Associative ...

  7. iOS/Objective-C开发 字典NSDictionary的深复制(使用category)

    目标:把NSDictionary对象转换成NSMutableDictionary对象,对象内容是字符串数组,需要实现完全复制(深复制). 如果调用NSDictionary的mutableCopy方法, ...

  8. 关于delegate, category和subclass

    因为自己在学习这三个概念的时候,实在是走了很多的弯路,而且当我意识到这些概念在cocoa中很重要时,我便更糊涂了…或许从C++或者Java转过来的高手一看就明白,所以高手您随便拍砖,指正我的错误:新手 ...

  9. [置顶] What is the difference between Category and Class Extension?

    细心的人会发现当我们new 一个文件的时候会发现下图的部分. 但是这个问题来了Category 和 Extension 就近又什么区别呢? 1:什么是Category? 实现这样一种场景,当我们用我们 ...

随机推荐

  1. Python3.5.2官方文档学习备忘录

    网址:https://docs.python.org/3/ 虽然学习官方文档有些耗时,不过看最原版的还是感觉好一点,原汁原味没有曲解没有省略. 从命令行向Python传递参数,运行:python - ...

  2. cocos2d-x 读取.plist文件

    转自:http://blog.csdn.net/hgplan/article/details/8629904 在cocos2d-x中可以用.plist格式的文件来保存数据,它是XML文件格式的一种,在 ...

  3. delphi 选中的展开0级 子级不展开

    TreeView1.Selected.Expand(False); //选中的展开0级 子级不展开 TreeView1.Selected.Expand(True); //全部展开 来自为知笔记(Wiz ...

  4. delphi TPopupMenu.Popup

      procedure TPopupMenu.Popup(X, Y: Integer);     这个点是相对桌面的而不是窗体的   GetCursorPos是鼠标的位置 鼠标动这个点就不一样   v ...

  5. iOS开发——数据持久化Swift篇&使用Core Data进行数据持久化存储

    使用Core Data进行数据持久化存储   一,Core Data介绍 1,Core Data是iOS5之后才出现的一个数据持久化存储框架,它提供了对象-关系映射(ORM)的功能,即能够将对象转化成 ...

  6. iOS开发——图形与动画篇OC篇&图层基本上动画

    图层的一些基本动画效果 #define kRadianToDegrees (radian) (radian * 180.0) / (M_PI) //闪烁 [self.testView.layer ad ...

  7. 使用maven命令建立java项目

    在terminal中输入: mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -Darc ...

  8. yii中阻止 SHOW CREATE TABLE and SHOW COLUMNS 每次执行

    Disable SHOW CREATE TABLE and SHOW COLUMNS in Yii为啥会显示:SHOW CREATE TABLE and SHOW COLUMNS 答案:This is ...

  9. ant脚本打jar包 自动获取时间以及项目svn版本号

    1.关键代码,获取时间 <tstamp> <format property="touch.time" pattern="yyyy/MM/dd hh:mm ...

  10. RedHat Enterprise Linux下配置yum源(尝试过的可行方案)

    转自:http://bbs.51cto.com/thread-861410-1.html 一.在linux 6.1中本地yum源配置:首先编辑yum源配置文件我们可以再这个目录中新创建一个配置文件,v ...