开发一款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过去,效果一样.
#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
网友评论