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:

interface

var nonMutableProperty: Property<Bool> { get }

implementation

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:

nonMutableProperty.producer
    .on(value: { embeddableView in

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

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.

Welcome to The infinite monkey theorem

Somewhere a monkey just typed Shakespeare in TypeScript. Be the first to read the masterpieces (and the hilarious misfires) landing on the blog.

Subscribe to The infinite monkey theorem

We fling fresh posts—no banana peels attached—straight to your inbox.