iOS 进阶学习

解决Xcode打印 NSArray 和 NSDictionary

2018-11-20  本文已影响116人  下班不写程序

开发一款App少不了网络请求,在测试方调的过程中更避免不了使用Xcode打印log日志来调试,对于一些返回信息,系统默认输出的是经过Unicode编码的内容,这时候就需要汉化使其明了,之前都是添加NSArray和NSDictionary的分类来完成的,但是Xcode9之后,系统提供的方法发生了一些变化,总结如下:

Xcode9.0之前控制台打印中文方法
#import "NSArray+Log.h"
@implementation NSArray (Log)
 // 只需要在分类中,重写这个方法的实现,不需要导入分类文件就会生效,字典也是一样
- (NSString *)descriptionWithLocale:(id)locale
但Xcode9.0之后打印数组与字典居然不调用以上方法了,why?查阅了官方api的更新文档,上面是这样描述的:
Developer Documetation

总结

也就是说Xcode9.0之后推出了新的API,当你调用这个新的api时,会自动判断以上四种情况来自动的帮助我们转译或做处理. 而原来的api则会只在满足自己的元素响应时,才会被调用.下面是更新后的分类,导进项目中即可使用;也可以创建分类直接copy过去,效果一样.

文件下载地址:https://github.com/LDisguiser/XcodeLog

#import "NSArray+Log.h"

@implementation NSArray (Log)
- (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level{
    
    NSMutableString *stringM = [NSMutableString string];
    [stringM appendString:@"(\n"];
    
    [self enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        
        [stringM appendFormat:@"\t%@,\n",obj];
    }];
    
    [stringM appendString:@")\n"];
    
    return stringM;
}

@end

@implementation NSDictionary (Log)
- (NSString *)descriptionWithLocale:(nullable id)locale indent:(NSUInteger)level{
    
    NSMutableString *stringM = [NSMutableString string];
    [stringM appendString:@"{\n"];

    [self enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        
        [stringM appendFormat:@"\t%@ = %@;\n",key,obj];
    }];
    
    [stringM appendString:@"}\n"];
    
    return stringM;
}

@end

.End

上一篇下一篇

猜你喜欢

热点阅读