Skip to content

Instantly share code, notes, and snippets.

@lamprosg
Last active September 20, 2021 10:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lamprosg/d1eaad1f2ac7696e6a97c6f64d3ab5a9 to your computer and use it in GitHub Desktop.
Save lamprosg/d1eaad1f2ac7696e6a97c6f64d3ab5a9 to your computer and use it in GitHub Desktop.
(iOS) - SwiftUI with VIP
import SwiftUI
@main
struct MyMainApp: App {
var body: some Scene {
WindowGroup {
MainView.build()
}
}
}
// MARK: - File - MainView.swift
import SwiftUI
struct MainView: View {
@ObservedObject private var viewModel: MainViewModel
private var interactor: MainInteractor
var body: some View {
Text(viewModel.message).onAppear {
self.interactor.updateMessage()
}
}
static func build() -> some View {
let presenter = MainPresenter()
let interactor = MainInteractor(presenter: presenter)
return MainView(viewModel: presenter.viewModel,
interactor: interactor)
}
}
// MARK: - File - MainInteractor.swift
import Foundation
class MainInteractor {
private var presenter: MainPresentable
init(presenter: MainPresentable) {
self.presenter = presenter
}
func updateMessage() {
presenter.presentMessage()
}
}
// MARK: - File - MainPresenter.swift
import Foundation
protocol MainPresentable {
func presentMessage()
}
class MainPresenter: MainPresentable {
var viewModel: MainViewModel = MainViewModel()
func presentMessage() {
viewModel.message = "Hello"
}
}
//MARK: - View Model
import SwiftUI
class MainViewModel: ObservableObject {
@Published var message: String = ""
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment