 enum SniperError: ErrorType {
     case InvalidArgument, TargetNotFound
 }
+
 class Target: CommandType {
-    let commandName = "target"
-    let commandShortDescription = "List all running apps's info."
-    let commandSignature = "[<keyword>]"
+    var commandName:String {
+        return "target"
+    }
+
+    var commandShortDescription:String {
+        return "List all running apps's info."
+    }
+
+    var commandSignature:String {
+        return "[<keyword>]"
+    }
 
     func execute(arguments: CommandArguments) throws  {
         let keyword = arguments.optionalArgument("keyword")

        }
    }
}
class Shoot: OptionCommandType {
    let commandName = "shoot"
    let commandShortDescription = "Terminate the specified running app. You need to pass the exact bundleID or PID."
    let commandSignature = ""

    var pid:Int?
    var bundleId:String?

    func setupOptions(options: Options) {
        options.onKeys(["-p", "--pid"]) { [unowned self] _, value in

                throw SniperError.TargetNotFound
            }
            filtered.forEach(self.terminate)

        } else if let bundleId = bundleId {

            let apps = NSRunningApplication.runningApplicationsWithBundleIdentifier(bundleId)
            guard !apps.isEmpty else {
                print("No such process: \"\(bundleId)\"")
                throw SniperError.TargetNotFound
            }
            apps.forEach(self.terminate)

        }
    }
}
