1

私はiOS開発に不慣れで、いくつか問題があります...

私は SwiftUI をアーキテクチャ (VIPER/B) で使用しています。これは、このスタックを使用した ios dev の最初のステップです。

ここから基本プロジェクトを取得します

だから私は自分のモジュールを構築するfuncを持っていて、それは私を返します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
    }
}

その後、私はこの関数を my で呼び出しますRouter:

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

viewController.presentasを除いてビルダーモジュールを呼び出す他の方法は考えていませんでした。weak var viewController: UIViewController!さらに、元のテンプレートですでに発表されていたため、viewController.present

その結果、この func を自分Viewで呼び出すと、ViewControllerモーダルになりますが、フルスクリーン プレゼンテーションを取得できません。

私のPresenter:

var router : LoginRouter!

func login() {
    router.presentHomeScreen()
}

私のView:

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

func login() {
    presenter.login()
}

これをフルスクリーンモードで表示するにはどうすればよいですか? そして、デフォルトのようにセグエを表示したいNavigationController:新しいViewControllerものが左から右に現れるとき。また、私は を使用しようとしましNavigationLinkたが、パラメーターの宛先は型Viewではなく型を取得する必要がありViewControllerます...そして、エラーが発生します:

タイプ '()' は 'View' に準拠できません。構造体/列挙型/クラス型のみがプロトコルに準拠できます

4

0 に答える 0