我是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';只有结构/枚举/类类型可以符合协议