#import <Foundation/Foundation.h>
-@interface HMJSONCommand : NSObject
+@interface HMJSONCommand : NSObject <NSCopying>
+ (HMJSONCommand *)commandForAPI:(NSString *)api;
// for subclass
+ (void)registerClass:(Class)commandClass;
+// for Swift
++ (void)registerInstance:(id)command;
+
@property (copy, readonly) NSString *api; // api is /kcsapi/mainAPI/subAPI
@property (strong, readonly) NSDictionary *arguments;
@property (strong, readonly) id json; // NSArray or NSDictionary
+ (HMJSONCommand *)commandForAPI:(NSString *)api
{
- for(Class commandClass in registeredCommands) {
- if([commandClass canExcuteAPI:api]) {
- HMJSONCommand *command = [commandClass new];
+ for(HMJSONCommand *c in registeredCommands) {
+ if([[c class] canExcuteAPI:api]) {
+ HMJSONCommand *command = [c copy];
command.api = api;
#if ENABLE_JSON_LOG_HANDLED_API
HMJSONViewCommand *viewCommand = [HMJSONViewCommand new];
+ (void)registerClass:(Class)commandClass
{
if(!commandClass) return;
- if([registeredCommands containsObject:commandClass]) return;
- [registeredCommands addObject:commandClass];
+ [self registerInstance:[commandClass new]];
+}
+
+
+// for Swift
++ (void)registerInstance:(id)command
+{
+ if(!command) return;
+ if([registeredCommands containsObject:command]) return;
+ [registeredCommands addObject:command];
+}
+- (instancetype)copyWithZone:(NSZone *)zone
+{
+ return [[self class] new];
}