| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- //
- // NSArray-Addtions.m
- // JasonDevelop
- //
- // Created by Jason Lee on 10/29/14.
- // Copyright (c) jasondevelop. All rights reserved.
- //
- @import ObjectiveC.runtime;
- #import "NSArray-Addtions.h"
- @implementation NSArray (Addtions)
- - (NSString*)jsonStringWithPrettyPrint:(BOOL) prettyPrint {
- NSError *error;
- NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self
- options:(NSJSONWritingOptions) (prettyPrint ? NSJSONWritingPrettyPrinted : 0)
- error:&error];
- if (!jsonData) {
- NSLog(@"bv_jsonStringWithPrettyPrint: error: %@", error.localizedDescription);
- return @"[]";
- } else {
- return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
- }
- }
- - (id)objectKey:(NSString *)key eqaulToString:(NSString *)aString {
- NSPredicate *pred = [NSPredicate predicateWithFormat:@"SELF.%@ == %@", key, aString];
- NSArray *filteredArray = [self filteredArrayUsingPredicate:pred];
-
- return filteredArray && filteredArray.count ? filteredArray[0] : nil;
- }
- - (id)objectByUsingPredicateFormat:(NSString *)format, ... {
-
- va_list args;
- va_start(args, format);
-
- NSPredicate *pred = [NSPredicate predicateWithFormat:format arguments:args];
- NSArray *filteredArray = [self filteredArrayUsingPredicate:pred];
-
- return filteredArray && filteredArray.count ? filteredArray[0] : nil;
- }
- - (id)objectInSubArrays:(NSString *)description as:(id)aObject {
- id robject = nil;
-
- for (id object in self) {
- if (description && [description isKindOfClass:[NSString class]]) {
- //make selector
- SEL selector = NSSelectorFromString(description);
-
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
- //get sub array
- NSArray *subarray = [object performSelector:selector];
- #pragma clang diagnostic pop
-
- //find associated object from subArray
- for (id subObject in subarray) {
- if ([subObject isEqual:aObject]) {
- robject = subObject;
- break;
- }
- }
- }
-
- if (robject) {
- break;
- }
- }
- return robject;
- }
- - (id)matchedObjectName:(NSString *)objectName condition:(BOOL)condition {
- id matchedObject = nil;
- for (id object in self) {
- id associatedObj = objc_getAssociatedObject(object, (__bridge const void *)(objectName));
- if ([associatedObj boolValue] == condition) {
- matchedObject = object;
- break;
- }
- }
- return matchedObject;
- }
- - (NSArray *)matchedArrayByObjectName:(NSString *)objectName condition:(BOOL)condition {
- NSMutableArray *marray = [[NSMutableArray alloc] init];
- for (id object in self) {
- id associatedObj = objc_getAssociatedObject(object, (__bridge const void *)(objectName));
- if ([associatedObj boolValue] == condition) {
- [marray addObject:object];
- }
- }
- return marray;
- }
- - (NSArray *)matchedArrayInSubArrays:(id)description objectName:(NSString *)objectName condition:(BOOL)condition {
- NSMutableArray *marray = [[NSMutableArray alloc] init];
-
- for (id object in self) {
- if (description && [description isKindOfClass:[NSString class]]) {
- //make selector
- SEL selector = NSSelectorFromString(description);
-
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
- //get sub array
- NSArray *subarray = [object performSelector:selector];
- #pragma clang diagnostic pop
-
- //find associated object from subArray
- id matchedObject = [subarray matchedObjectName:objectName condition:condition];
- if (matchedObject) {
- [marray addObject:matchedObject];
- }
- }
- }
- return marray;
- }
- - (NSArray *)matchedArrayInSubArrays:(id)description predicateFormat:(NSString *)format, ... {
- va_list args;
- va_start(args, format);
- NSPredicate *pred = [NSPredicate predicateWithFormat:format arguments:args];
- return [self matchedArrayInSubArrays:description predicate:pred];
- }
- - (NSArray *)matchedArrayInSubArrays:(id)description predicate:(NSPredicate *)pred {
- NSMutableArray *marray = [[NSMutableArray alloc] init];
- for (id object in self) {
- if (description && [description isKindOfClass:[NSString class]]) {
- SEL selector = NSSelectorFromString(description);
-
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
- NSArray *subarray = [object performSelector:selector];
- #pragma clang diagnostic pop
-
- NSArray *filteredArray = nil;
- @try {
- filteredArray = [subarray filteredArrayUsingPredicate:pred];
- if (filteredArray && filteredArray.count) {
- [marray addObjectsFromArray:filteredArray];
- }
- }
- @catch (NSException *exception) {
- continue;
- }
- } else if ([object isKindOfClass:[NSArray class]]) {
- NSArray *array = object;
-
- NSArray *filteredArray = [array filteredArrayUsingPredicate:pred];
- [marray addObjectsFromArray:filteredArray];
-
- } else if ([object isKindOfClass:[NSDictionary class]]) {
- NSLog(@"%s\n %@", __PRETTY_FUNCTION__, object);
- }
- }
- return marray;
- }
- - (NSArray *)filteredArrayUsingPredicateFormat:(NSString *)format, ... {
-
- va_list args;
- va_start(args, format);
-
- NSPredicate *pred = [NSPredicate predicateWithFormat:format arguments:args];
- return [self filteredArrayUsingPredicate:pred];
- }
- @end
|