Skip to content

Instantly share code, notes, and snippets.

@sumimakito
Last active December 17, 2017 09:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sumimakito/efa0141760339e0d84d80a15953c0bd1 to your computer and use it in GitHub Desktop.
Save sumimakito/efa0141760339e0d84d80a15953c0bd1 to your computer and use it in GitHub Desktop.
Gracefully output Arrays/Dictionaries that contain Unicode encoded strings. (may not work very well)
//
// Better_NSLog.m
//
// Created by Makito on 2017/12/17.
// Copyright © 2017年 Makito. All rights reserved.
//
#import <Foundation/Foundation.h>
#define INDENT @" "
@interface Helper : NSObject
+ (NSString*)printNSArray:(NSArray*)array indent:(int)level;
+ (NSString*)printNSDictionary:(NSDictionary*)dict indent:(int)level;
@end
@implementation Helper
+ (NSString*)printNSArray:(NSArray*)array indent:(int)level{
NSMutableString *indent_ = [NSMutableString string];
for(int i=0; i<level; i++){
[indent_ appendString:INDENT];
}
NSMutableString *formatted = [NSMutableString string];
[formatted appendString:indent_];
[formatted appendString:@"[\n"];
for (NSObject* el in array) {
if([el isKindOfClass:[NSArray class]]){
[formatted appendString:[Helper printNSArray:(NSArray*)el indent:level+1]];
} else if([el isKindOfClass:[NSDictionary class]]){
[formatted appendString:[Helper printNSDictionary:(NSDictionary*)el indent:level+1]];
} else {
NSMutableString *line = [NSMutableString string];
[line appendString:indent_];
[line appendString:INDENT];
[line appendString:@"\""];
[line appendString: [NSString stringWithFormat:@"%@", el]];
[line appendString:@"\",\n"];
[formatted appendString:line];
}
}
[formatted appendString:indent_];
[formatted appendString:@"]\n"];
return formatted;
}
+ (NSString*)printNSDictionary:(NSDictionary*)dict indent:(int)level{
NSMutableString *indent_ = [NSMutableString string];
for(int i=0; i<level; i++){
[indent_ appendString:INDENT];
}
NSMutableString *formatted = [NSMutableString string];
[formatted appendString:indent_];
[formatted appendString:@"{\n"];
for (id key in dict) {
NSObject *el = [dict objectForKey:key];
if([el isKindOfClass:[NSArray class]]){
[formatted appendString:[Helper printNSArray:(NSArray*)el indent:level+1]];
} else if([el isKindOfClass:[NSDictionary class]]){
[formatted appendString:[Helper printNSDictionary:(NSDictionary*)el indent:level+1]];
} else {
NSMutableString *line = [NSMutableString string];
[line appendString:indent_];
[line appendString:INDENT];
[line appendString: @"\""];
[line appendString: key];
[line appendString: @"\": \""];
[line appendString: [NSString stringWithFormat:@"%@", el]];
[line appendString: @"\",\n"];
[formatted appendString:line];
}
}
[formatted appendString:indent_];
[formatted appendString:@"}\n"];
return formatted;
}
@end
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSDictionary *dict1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"黑色高級車", @"Key1", @"A frank dude in ASCII.", @"Key2", nil];
NSDictionary *dict2 = [[NSDictionary alloc]initWithObjectsAndKeys:@"雷電牙醫", @"Key3", dict1, @"Key4", nil];
NSArray *arr = [[NSArray alloc] initWithObjects:@"华莱士 sells 唐揚げ", dict2, nil];
// First "\n" is only intended to skip the ugly line that contains the log header
NSLog(@"\n%@", [Helper printNSArray:arr indent:0]);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment