ребята! Я новичок в разработке iOS, и у меня проблемы ... Я использую SwiftUI с архитектурой - VIPER / B. Это мой первый шаг в разработке ios с этим стеком.
Я беру базовый проект из https://theswiftdev.com/how-to-build-swiftui-apps-using-viper/
Так что я получаю удовольствие c, которые создают мои модуль, и он возвращает мне ViewController:
final class HomeModule: ModuleInterface {
typealias View = HomeView
typealias Presenter = HomePresenter
typealias Router = HomeRouter
typealias Interactor = HomeInteractor
func build() -> UIViewController {
let presenter = Presenter()
let interactor = Interactor()
let router = Router()
let viewModel = HomeViewModel()
let view = View(presenter: presenter, viewModel: viewModel)
.environmentObject(AppEnvironment())
presenter.viewModel = viewModel
self.assemble(presenter: presenter, router: router, interactor: interactor)
let viewController = UIHostingController(rootView: view)
router.viewController = viewController
return viewController
}
После этого я вызываю это развлечение c в моем маршрутизаторе:
final class LoginRouter : LoginRouterProtocol {
weak var presenter : LoginPresenter!
weak var viewController: UIViewController!
func presentHomeScreen() {
viewController.present(HomeModule().build(), animated: true, completion: nil)
}
Я не придумал другого способа вызвать Builder, кроме как viewController.present
, и, кроме того, weak var viewController: UIViewController!
уже был объявлен в исходном шаблоне, что подсказало viewController.present
И в результате, когда я назову это развлечение c в моем представлении, я получаю мой ViewController модально, но я не могу получить полноэкранную презентацию.
Fun c в моем Presenter:
var router : LoginRouter!
func login() {
router.presentHomeScreen()
}
Fun c в моем View:
Button(action: {
self.login()
}) {
Text("Log in")
}
func login() {
presenter.login()
}
Пожалуйста, помогите мне представить это в полноэкранном режиме, и я хочу показать переход, как в NavigationController по умолчанию: когда новый ViewController появляется слева направо. Кроме того, я пытаюсь использовать NavigationLink, но пункт назначения должен иметь тип «View», а не ViewController ... И это дает мне ошибку:
Type '()' cannot conform to 'View'; only struct/enum/class types can conform to protocols
Какие идеи?