A very important difference between a Signal and a SignalProducer

A property in ReactiveSwift allows us to track its changes over time.

A Property in ReactiveSwift allows us to track its changes over time.

A Property is thread-safe and observable.

A MutableProperty is a Property that can also be changed.

Frequently we will use the following pattern to expose only non-muttable property in the interface:


var nonMutableProperty: Property<Bool> { get }


public var nonMutableProperty: Property< Bool> { return Property(_nonMutableProperty) }

fileprivate let _ nonMutableProperty: MutableProperty<Bool>

A Property exposes a signal and a producer to which we subscribe to track changes. For example:

    .on(value: { embeddableView in

        log.verbose("do something")
    .on(failed: { error in

The difference is that the signal will only send value changes that happen after subscribing, whereas the SignalProducer creates a signal that sends the current value immediately followed by all changes later on.

In other words signal is a hot observable because like a TV broadcast it sends values even if it does not have any subscribers and as a result does not introduce any side-effects. SignalProducer is a cold observable because it is created only after it is being subscribed to.

Subscribe to The infinite monkey theorem

Get the latest posts delivered right to your inbox