An implementation of the ´BLoC´ (Business Logic Component) with Apple's Combine framework.
BLoC is a business logic layer abstraction in which you input an Event
and it outputs a State
.
This abstraction contributes to the construction of reactive apps that respects the unidirectional data flow and have a single source of truth.
A Bloc
from the CombineBloc package is a composite object that has a Subscriber
which receives Event
and a Publisher
of State
.
A closure is called inside the Bloc everytime a new Event
is received by the Subscriber
. This closure may emit a new State
through the Publisher
.
The key points are:
- Inputs and outputs are implemented with event-processing operators
- Dependencies must be injectable and platform agnostic
This package is inspired by the concept of BLoC proposed by Paolo Soares on DartConf 2018 and by Felix Angelov's Flutter Bloc State Management Library
Add this project on your Package.swift
import CombineBloc
let package = Package(
dependencies: [
.Package(url: "https://github.com/wjuniorgit/combine-bloc", from: "0.2.0"),
],
)
This package has three use case examples implemented:
enum CounterEvent: Equatable {
case increment
case decrement
}
struct CounterState: Equatable {
let count: Int
}
final class CounterBloc: Bloc<CounterEvent, CounterState> {
init() {
super.init(initialValue: CounterState(count: 0)) {
event, state, emit in
switch event {
case .increment:
emit(CounterState(count: state.count + 1))
case .decrement:
emit(CounterState(count: state.count - 1))
}
}
}
}
- 0.2.0
- The first proper release
- 0.1.0
- Work in progress
Wellington Soares
Distributed under the MIT license. See LICENSE
for more information.