IOS中 打印字典、数组时 直接显示中文(而不是显示Unicode字符)

时间:2023-01-05 16:07:35

IOS中打印时,中文一般会被默认转换为Unicode字符的形式。
针对字典和数组,可通过增加分类,并在分类中重写 descriptionWithLocale: 方法的形式,实现打印结果中直接显示中文。

// 字典的分类
@implementation NSDictionary (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *string = [NSMutableString string];

// 开头有个{
[string appendString:@"{\n"];

// 遍历所有的键值对
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[string appendFormat:@"\t%@", key];
[string appendString:@" : "];
[string appendFormat:@"%@,\n", obj];
}];

// 结尾有个}
[string appendString:@"}"];

// 查找最后一个逗号
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound)
[string deleteCharactersInRange:range];

return string;
}
@end


// 数组的分类
@implementation NSArray (Log)

- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *string = [NSMutableString string];

// 开头有个[
[string appendString:@"[\n"];

// 遍历所有的元素
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[string appendFormat:@"\t%@,\n", obj];
}];

// 结尾有个]
[string appendString:@"]"];

// 查找最后一个逗号
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound)
[string deleteCharactersInRange:range];

return string;
}
@end