 
 		isEnabled = state.map { $0.isEnabled }
 		isExecuting = state.map { $0.isExecuting }
+	}
+
+	/// Initializes an action that will be conditionally enabled, and creates a
+	/// SignalProducer for each input.
+	///
+	/// - parameters:
+	///   - enabledIf: Boolean property that shows whether the action is
+	///                enabled.
+	///   - execute: A closure that returns the signal producer returned by
+	///              calling `apply(Input)` on the action.
+	public convenience init<P: PropertyProtocol>(enabledIf property: P, _ execute: @escaping (Input) -> SignalProducer<Output, Error>) where P.Value == Bool {
+		self.init(_internalEnabledIf: property) {
+			execute($0).mapError(ActionError.producerFailed)
+		}
 	}
 
 	/// Initializes an action that will be enabled by default, and creates a

	///   - execute: A closure to return a new SignalProducer based on the
	///              current value of `input`.
	public init<P: PropertyProtocol, T>(input: P, _ execute: @escaping (T) -> SignalProducer<Output, Error>) where P.Value == T? {
		self.init(enabledIf: input.map { $0 != nil }) {
			execute(input.value!)
		}
	}



	/// Initializes an action that will be conditionally enabled, and creates a
	/// SignalProducer for each input.
	///
	/// - warning: This is an internal implementation detail of `Action.init(input:_:)`
	///            and will be removed in a future version of ReactiveSwift.
	///            Use `Action.init(enabledIf:_:)` instead.
	///
	/// - parameters:
	///   - enabledIf: Boolean property that shows whether the action is
	///                enabled.
	///   - execute: A closure that returns the signal producer returned by
	///              calling `apply(Input)` on the action.
	public init<P: PropertyProtocol>(_internalEnabledIf property: P, tryExecute: @escaping (Input) -> SignalProducer<Output, ActionError<Error>>) where P.Value == Bool {
		deinitToken = Lifetime.Token()
		lifetime = Lifetime(deinitToken)

		executeClosure = tryExecute

		(events, eventsObserver) = Signal<Event<Output, Error>, NoError>.pipe()
		(disabledErrors, disabledErrorsObserver) = Signal<(), NoError>.pipe()
