     return false
   }
   
-  public init(shortFlag: String, longFlag: String, required: Bool, helpMessage: String) {
-    assert(shortFlag.characters.count == 1, "Short flag must be a single character")
-    assert(Int(shortFlag) == nil && shortFlag.toDouble() == nil, "Short flag cannot be a numeric value")
-    assert(Int(longFlag) == nil && longFlag.toDouble() == nil, "Long flag cannot be a numeric value")
+  private init(_ shortFlag: String?, _ longFlag: String?, _ required: Bool, _ helpMessage: String) {
+    if let sf = shortFlag {
+      assert(sf.characters.count == 1, "Short flag must be a single character")
+      assert(Int(sf) == nil && sf.toDouble() == nil, "Short flag cannot be a numeric value")
+    }
+    
+    if let lf = longFlag {
+      assert(Int(lf) == nil && lf.toDouble() == nil, "Long flag cannot be a numeric value")
+    }
     
     self.shortFlag = shortFlag
     self.longFlag = longFlag

    return true
  }
  
  public init(shortFlag: String, longFlag: String, helpMessage: String) {
    super.init(shortFlag: shortFlag, longFlag: longFlag, required: false, helpMessage: helpMessage)
  }
  
  override func setValue(values: [String]) -> Bool {
    _value = true
    return true

    self.required = required
  }
  
  /* The optional casts in these initalizers force them to call the private initializer. Without
   * the casts, they recursively call themselves.
   */
  
  /** Initializes a new Option that has both long and short flags. */
  public convenience init(shortFlag: String, longFlag: String, required: Bool = false, helpMessage: String) {
    self.init(shortFlag as String?, longFlag, required, helpMessage)
  }
  
  /** Initializes a new Option that has only a short flag. */
  public convenience init(shortFlag: String, required: Bool = false, helpMessage: String) {
    self.init(shortFlag as String?, nil, required, helpMessage)
  }
  
  /** Initializes a new Option that has only a long flag. */
  public convenience init(longFlag: String, required: Bool = false, helpMessage: String) {
    self.init(nil, longFlag as String?, required, helpMessage)
  }
  
  func flagMatch(flag: String) -> Bool {
    return flag == shortFlag || flag == longFlag
  }
