     return try self.attribute(attribute.rawValue)
   }
 
-  public func arrayAttribute<T>(attribute: Attribute) throws -> [T]? {
-    return try self.arrayAttribute(attribute.rawValue)
-  }
-
   public func attribute<T>(attribute: String) throws -> T? {
     var value: AnyObject?
     let error = AXUIElementCopyAttributeValue(element, attribute, &value)

    }
  }

  /// Sets the value of `attribute` to `value`.
  ///
  /// - warning: Unlike read-only methods, this method throws if the attribute doesn't exist.
  ///
  /// - throws:
  ///   - `Error.AttributeUnsupported`: `attribute` isn't supported.
  ///   - `Error.IllegalArgument`: `value` is an illegal value.
  ///   - `Error.Failure`: A temporary failure occurred.
  public func setAttribute(attribute: Attribute, value: Any) throws {
    try self.setAttribute(attribute.rawValue, value: value)
  }

  public func setAttribute(attribute: String, value: Any) throws {
    let error = AXUIElementSetAttributeValue(element, attribute, packAXValue(value))

    guard error == .Success else {
      throw error
    }
  }

  // Checks if the value is one supported by AXValue and if so, wraps it.
  // If the value is a UIElement, unwraps it to an AXUIElement.
  private func packAXValue(value: Any) -> AnyObject {

    }
  }

  // MARK: - Actions

  /// Returns a list of actions that can be performed on the element.
