MVVMÇ (MVVM Calçot) is an implementation of MVVM influenced by VIPER. Basically VIPER with MVVM names.
The most important concept of MVVMÇ is that implements MVVM with immutable ViewModels, this helps to write correct and testable code with minor complexity.
Other than this it introduces Interactor and Coordinator to MVVM.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| private extension MKMapRect { | |
| func with(offset: UIOffset, size: CGSize) -> MKCoordinateRegion { | |
| let horizontalRatio = self.size.width / Double(size.width) | |
| let verticalRatio = self.size.height / Double(size.height) | |
| let mapRect = MKMapRectInset(self, horizontalRatio * Double(offset.horizontal), verticalRatio * Double(offset.vertical)) | |
| var region = MKCoordinateRegionForMapRect(mapRect) | |
| let minSpan = 0.001 | |
| region.span = MKCoordinateSpanMake(max(region.span.latitudeDelta, minSpan), max(region.span.longitudeDelta, minSpan)) | |
| return region |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import Foundation | |
| import UIKit | |
| protocol Interactor: class { | |
| associatedtype ModelType | |
| var model: ModelType { get } | |
| var modelDidUpdate: (() -> Void)? { get set } | |
| } |
OlderNewer