Last active
September 20, 2021 10:40
-
-
Save lamprosg/d1eaad1f2ac7696e6a97c6f64d3ab5a9 to your computer and use it in GitHub Desktop.
(iOS) - SwiftUI with VIP
This file contains 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 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