Coined by Raymond Law in 2015
Wanted to improve testability in his projects.
"Clean Swift is not a framework. It is simply a set of Xcode templates to generate the Clean Architecture components for you."
![](https://img-blog.csdnimg.cn/img_convert/ea1a840fa754198ef8776ca31d39c0ab.png)
Scene
In Clean Swift the project structure is built around scenes (or screens)
Model
View Controller
Router
Interactor
Presenter
Worker
Configurator
Use Xcode templates for creating scenes
Configurator
Initializes and connects all the previously mentioned components
Model
Use case structures defining data passed between components
Request (View Controller)
Input data coming from the view controller to invoke some business logic in the interactor.
Response (Interactor)
The result of some work passed from the interactor to the presenter.
View Model (Presenter)
The prepared data from the presenter for the view controller to update the views.
![](https://img-blog.csdnimg.cn/img_convert/453b6d342fe662ddf9548f1435f02371.png)
View Controller (Clean Swift)
The role of a View Controller is practically demoted to that of a view
Still receives calls to lifecycle methods
viewDidLoad, viewWillAppear, viewWillDisappear...
Still serves as the delegate
UITableViewDataSource, UITableViewDelegate...
Still handles user interaction
@IBAction...
No longer contains any business logic
This role is assumed by the Interactor
No longer transforms/prepares data for displaying
This role is assumed by the Presenter
No longer serves data and prepares the next
view controller
This role is assumed by the Router
![](https://img-blog.csdnimg.cn/img_convert/d58e33740664807bb835cefb36d51f5b.png)
Interactor
The interactor handles all business logic and serves as a data store
This includes
Input data validation
Choosing which Worker is suitable for the task
Invoking the Workers to perform the actual processing
Storing the required data
Creating a response data and passing
it to the Presenter
![](https://img-blog.csdnimg.cn/img_convert/612926a712ec288973843c7fa2c54168.png)
Worker
Handles all the API request/response calls for the Interactor
![](https://img-blog.csdnimg.cn/img_convert/40eef09d30b3a5d27e196a66c31cc3ea.png)
Presenter
The presenter transforms and prepares response data for displaying
The response from the Interactor usually contains data in some non-formatted way
Date, NSNumber, CustomObject, ...
The ViewController in most cases needs simple values as Strings for displaying
Presenter formats the Date using a DateFormatter
String result is sent to the ViewController
![](https://img-blog.csdnimg.cn/img_convert/0ae670f2c55220ce93460116a6cba255.png)
Router
The router handles the navigation and passes the data between scenes
Navigation
Automatic segue
Manual segue
Programmatic
Data passing
Using the Interactor's Data Store capability
![](https://img-blog.csdnimg.cn/img_convert/eb6702419edd3e4b67c8b4852f64c312.png)