OSDN Git Service

クラスオブジェクトではなくインスタンスを登録するように変更
authormasakih <masakih@users.sourceforge.jp>
Sat, 10 Jan 2015 12:36:08 +0000 (21:36 +0900)
committermasakih <masakih@users.sourceforge.jp>
Sat, 10 Jan 2015 12:36:08 +0000 (21:36 +0900)
Swift化のための処置

KCD/HMJSONCommand.h
KCD/HMJSONCommand.m

index 13d2431..6dac17b 100644 (file)
@@ -8,7 +8,7 @@
 
 #import <Foundation/Foundation.h>
 
-@interface HMJSONCommand : NSObject
+@interface HMJSONCommand : NSObject <NSCopying>
 
 + (HMJSONCommand *)commandForAPI:(NSString *)api;
 
@@ -22,6 +22,9 @@
 // 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
index 3ae72fa..eef608e 100644 (file)
@@ -45,9 +45,9 @@ static NSMutableArray *registeredCommands = nil;
 
 + (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];
@@ -69,8 +69,20 @@ static NSMutableArray *registeredCommands = nil;
 + (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];
 }