对于数组或者字典中对象均为中文字符串时, 打印为unicode时, 如何正常显示?
- 对数组的description方法进行重写
- 定义一个新的方法,进行指定字符串的返回
- 以下方法仅仅是针对单个数组或者单个字典有效, 对于数组中嵌套字典时, 打印方法无效
数组
- 使用for循环进行打印
- (NSString *)chineseDescription {
// 打印数组时以"("打头
NSMutableString *desc = [NSMutableString stringWithString:@"(\n"];
/*
取得每一个数组元素, 进行追加字符串操作, 直到追加到最后一个字符时, 进行换行操作
\" 由于打印中文字符, 所以对元素都手动添加双引号, 可自行决定是否添加
\t 代表跳至下一个制表符位置
*/
for (int i = 0; i < self.count; i++) {
NSString *string = self[i];
[desc appendFormat:@"\t\"%@\"", string];
if (i != self.count - 1) {
[desc appendString:@",\n"];
}
}
[desc appendString:@"\n)"];
return desc;
- 使用迭代进行打印
- (NSString *)chineseDescription {
NSMutableString *desc = [NSMutableString stringWithString:@"(\n"];
// 迭代数组中的所有元素, 进行字符串拼接
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[desc appendFormat:@"\t\"%@\",\n", obj];
}];
[desc appendString:@")\n"];
// 删除最后一个逗号
if (self.count > 0) {
NSRange range = [desc rangeOfString:@"," options:NSBackwardsSearch];
[desc deleteCharactersInRange:range];
}
return desc;
}
字典
- (NSString *)chineseDescription {
NSMutableString *desc = [NSMutableString stringWithString:@"{\n"];
/*
取得每一个键值对, 进行追加字符串操作, 直到追加到最后一组键值对时, 进行换行操作
\" 由于打印的键值对都是中文字符, 所以对元素都手动添加双引号, 可自行决定是否添加
\t 代表跳至下一个制表符位置
*/
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[desc appendFormat:@"\t\"%@\" = \"%@\";\n", key, obj];
}];
[desc appendString:@"}\n"];
return desc;
}
只想日后回头看看来时的路,能发现自己并不是一无所有。
网友评论