如何将UIViewController类型传递给函数并在iOS Swift中强制转换变量?

如何将UIViewController类型传递给函数并在iOS Swift中强制转换变量?,ios,swift,uiviewcontroller,casting,Ios,Swift,Uiviewcontroller,Casting,解释 我正在定义一个通用API方法来处理整个应用程序中的弹出窗口。是否可以将UIViewController类型传递给函数,并将函数中的变量popOverVC类型强制转换为popUpVC类型,即作为参数传递给函数。Swift下的所有项目都是可观的 参考代码 func showAsPopUp(currentVC: UIViewController,currentVCname: String, popupStoryboardID: String, popUpVC:UIViewController){

解释

我正在定义一个通用API方法来处理整个应用程序中的弹出窗口。是否可以将UIViewController类型传递给函数,并将函数中的变量popOverVC类型强制转换为popUpVC类型,即作为参数传递给函数。Swift下的所有项目都是可观的

参考代码

func showAsPopUp(currentVC: UIViewController,currentVCname: String, popupStoryboardID: String, popUpVC:UIViewController){
        let popUpVCType:AnyClass = type(of: popUpVC)
        let popOverVC = UIStoryboard(name: currentVCname, bundle: nil).instantiateInitialViewController(popupStoryboardID) as! popUpVCType
        currentVC.addChildViewController(popOverVC)
    }

这是一个很好的使用情况


您的
popupStoryboardID
和popUpVCType都以相同的名称分配,否则,泛型是您的concept@Anbu.karthikPopupStoryBoardId是一个字符串,它是UI中的情节提要ID,popUpVCType是一种在我传递“PopUpViewController”时获取PopUpViewController对象类型的方法类作为参数它会将通用模板T转换为PopUpViewController而不是UIViewController吗?PopUpViewController是的子级UIVIewController@ThomasEaso当然您需要按照上面的最新编辑编写代码。谢谢。你的解决方案真的很有用
func showAsPopUp<T: UIViewController>(currentVC: UIViewController,currentVCname: String, popupStoryboardID: String, popUpVC: T.type) {
    let popOverVC = UIStoryboard(name: currentVCname, bundle: nil).instantiateViewController(withIdentifier: popupStoryboardID) as! T
    currentVC.addChildViewController(popOverVC)
}
showAsPopUp(currentVC: UIViewController(), currentVCname: "asdsadv", popupStoryboardID: "asd", popUpVC: SomePopUpViewController.self)