Skip to content

Instantly share code, notes, and snippets.

@warren-gavin
Last active November 5, 2016 15:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save warren-gavin/3750ff851844812ee02b4ad4a9b40a89 to your computer and use it in GitHub Desktop.
Save warren-gavin/3750ff851844812ee02b4ad4a9b40a89 to your computer and use it in GitHub Desktop.
Code snippets for the blog post on MVC-RS
protocol HeartRateStoring {
var source: HeartRateDataSource? { get }
var sink: HeartRateDataSink? { get }
}
struct HeartRateStore: HeartRateStoring {
let source: HeartRateDataSource?
let sink: HeartRateDataSink?
}
let backend = HeartRateBackend()
let rwStore = HeartRateStore(source: backend, sink: backend)
struct HeartRateSensor: HeartRateDataSource {
func read(at: Int) -> HeartRate {
// ...
}
}
struct HeartRateBackend: HeartRateDataSource, HeartRateDataSink {
func read(at: Int) -> HeartRate {
// ...
}
func write(heartRate: HeartRate) {
}
}
let sensor = HeartRateSensor()
let backend = HeartRateBackend()
let liveDataViewModel = ViewModel(store: HeartRateStore(source: sensor, sink: backend))
let historyViewModel = ViewModel(store: HeartRateStore(source: backend, sink: nil))
protocol HeartRateDataSource {
func read(at: Int) -> HeartRate
}
protocol HeartRateDataSink {
func write(heartRate: HeartRate)
}
struct HeartRate {
var value: Int
}
protocol HeartRateStoring {
func read(at: Int) -> HeartRate
func write(heartRate: HeartRate)
}
struct HeartRateStore: HeartRateStoring {
func read(at: Int) -> HeartRate {
// returns a HeartRate
}
func write(heartRate: HeartRate) {
//...
}
}
class ViewController: UIViewController {
private let viewModel: HeartRateViewModelling
init(viewModel: HeartRateViewModelling) {
self.viewModel = viewModel
}
}
// Somewhere else i.e. in the Router/Coordinator
let vc = ViewController(viewModel: ViewModel(store: HeartRateStore()))
class ViewController: UIViewController {
var viewModel: HeartRateViewModelling!
override func viewDidLoad() {
super.viewDidLoad()
viewMode = ViewModel(store: HeartRateStore())
}
}
protocol HeartRateViewModelling {
var store: HeartRateStoring { get }
}
struct ViewModel: HeartRateViewModelling {
let store: HeartRateStoring
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment