思路:既然我們需要改變NSArry和NSDictionary的系統(tǒng)類方法,所以我們可以利用運行時runtime來進(jìn)行方法交換狂鞋、另一種方法就是通過添加分類來重寫類方法的實現(xiàn)片择。注意:這里不是添加類擴(kuò)展。
為NSArry和NSDictionary添加分類
Object-C file.png
category.png
分類中的實現(xiàn):
方式一:
刪除.h文件(因為在項目里打印字典或數(shù)組時骚揍,使用的是系統(tǒng)的方法并不需要導(dǎo)入分類的頭文件)字管,.m文件下的實現(xiàn)啰挪,
#import <Foundation/Foundation.h>
@implementation NSDictionary (Log)
//重寫系統(tǒng)的方法控制輸出
-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
NSMutableString *string = [NSMutableString string];
//{}
[string appendString:@"{"];
//拼接key--value
[self enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
[string appendFormat:@"%@:",key];
[string appendFormat:@"%@,",obj];
}];
[string appendString:@"}"];
//刪除逗號
//從后往前搜索 得到的是搜索到的第一個符號的位置
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound) {
[string deleteCharactersInRange:range];
}
return string;
}
@end
@implementation NSArray (Log)
//重寫系統(tǒng)的方法控制輸出
-(NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level
{
// return @"你大爺是你大姐";
NSMutableString *string = [NSMutableString string];
//{}
[string appendString:@"["];
//拼接obj
[self enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
[string appendFormat:@"%@,\n",obj];
}];
[string appendString:@"]"];
//刪除逗號
//從后往前搜索 得到的是搜索到的第一個符號的位置
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound) {
[string deleteCharactersInRange:range];
}
return string;
}
@end
方式二:
.h文件
#import <Foundation/Foundation.h>
@interface NSArray (desc)
@end
@interface NSDictionary (desc)
@end
.m文件
#import "NSArray+desc.h"
@implementation NSArray (desc)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *strM = [NSMutableString stringWithString:@"(\n"];
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[strM appendFormat:@"\t%@,\n", obj];
}];
[strM appendString:@")"];
return strM;
}
@end
@implementation NSDictionary (desc)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *strM = [NSMutableString stringWithString:@"{\n"];
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[strM appendFormat:@"\t%@ = %@;\n", key, obj];
}];
[strM appendString:@"}\n"];
return strM;
}
@end