Как отобразить контроллер представления в полноэкранном режиме в SwiftUI с модулем Builder (UIKit)? - PullRequest
0 голосов
/ 05 августа 2020

ребята! Я новичок в разработке 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

Какие идеи?

...