1

我是iOS开发新手,遇到了一些麻烦...

我使用带有架构的 SwiftUI - VIPER/B。这是我在 ios 开发中使用此堆栈的第一步。

我从这里获取基础项目

所以我有构建我的模块的函数,它返回给我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
    }
}

之后,我在我的Router

final class LoginRouter : LoginRouterProtocol {
    
    weak var presenter : LoginPresenter!
    
    weak var viewController: UIViewController!
    
    func presentHomeScreen() {
        
        viewController.present(HomeModule().build(), animated: true, completion: nil)
        
    }
}

viewController.present除了 as之外,我没有想到任何其他方式来调用构建器模块,而且weak var viewController: UIViewController!在原始模板中已经宣布了,提示viewController.present

结果,当我在我的中调用这个函数时View,我得到了我的ViewController模态,但我无法获得全屏演示。

功能在我的Presenter

var router : LoginRouter!

func login() {
    router.presentHomeScreen()
}

功能在我的View

Button(action: {   
  self.login()
}) {
  Text("Log in")
}

func login() {
    presenter.login()
}

如何以全屏模式呈现此内容?我想像默认一样显示segue NavigationController:当新ViewController出现时从左到右。另外,我尝试使用NavigationLink,但参数目标必须获取类型View,而不是ViewController......它给了我一个错误:

类型 '()' 不能符合 'View';只有结构/枚举/类类型可以符合协议

4

0 回答 0