SWIFT:使用变量从单个函数导航到 UIViewControllers

SWIFT: Navigate to UIViewControllers from single function with a variable

我正在尝试为我的导航创建一个功能,而不必一遍又一遍地键入完全相同的行。

尝试这样做会导致错误:"Use of undeclared type 'viewController'"

我这样做是不是完全错误,我是否应该将这 4 行放在每个按钮上,只是使用不同的标识符和 viewController?

func navigateTo(identifier:String, viewController:UIViewController) {
   let newVC = storyboard?.instantiateViewController(withIdentifier: identifier) as! viewController
   newVC.modalPresentationStyle = .fullScreen
   newVC.modalTransitionStyle = .flipHorizontal
   self.present(newVC, animated: true, completion: nil)
}

@IBAction func btnOneTapped(_ sender: Any) {
   navigateTo("myVC", MyViewController)
}

您正在传递 UIViewController 的一个实例,并试图在下一行中将 UIViewController 转换为它。修改您的函数以将 ViewController.Type 作为参数,如下所示:

func navigateTo<ViewController: UIViewController>(identifier: String, viewController: ViewController.Type) {
    let newVC = storyboard?.instantiateViewController(withIdentifier: identifier) as! ViewController
    newVC.modalPresentationStyle = .fullScreen
    newVC.modalTransitionStyle = .flipHorizontal
    self.present(newVC, animated: true, completion: nil)
}

@IBAction func btnOneTapped(_ sender: Any) {
    navigateTo(identifier: "myVC", viewController: MyViewController.self)
}

确保您提供正确的标识符...下面的代码完美运行。

您的错误 -> 尝试这样做会导致错误:"Use of undeclared type 'viewController'"

这里有一个拼写错误 ViewController 即你正在尝试这个 - viewController

也总是尝试做 Optional-Binding 而不是 force-unwarpping 这可能会导致您的应用程序崩溃。

 func navigateTo(identifier:String, viewController:UIViewController) {
        if let newVC = storyboard?.instantiateViewController(withIdentifier: identifier) {
            newVC.modalPresentationStyle = .fullScreen
            newVC.modalTransitionStyle = .flipHorizontal
            self.present(newVC, animated: true, completion: nil)
        }
    }

    @IBAction func confirmBtn(_ sender: UIButton) {

        navigateTo(identifier: "myVC", viewController: MyViewController())

    }

谢谢大家,我已经搞定了:

func navigateToVC(identifier:String, viewController:ViewController.Type) {
   let newVC = storyboard?.instantiateViewController(withIdentifier: identifier) as! ViewController
   newVC.modalPresentationStyle = .fullScreen
   newVC.modalTransitionStyle = .flipHorizontal
   self.present(newVC, animated: true, completion: nil)
}

@IBAction func btnOneTapped(_ sender:Any) {
   navigateToVC(identifier: "myVC", viewController: MyViewController.self)
}