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

Tho*_*aso 4 casting uiviewcontroller ios swift

解释

我正在定义一个通用 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)
    }
Run Code Online (Sandbox Code Playgroud)

ZeM*_*oon 6

这是使用泛型的好情况。

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)
}
Run Code Online (Sandbox Code Playgroud)

不确定这里的功能是什么,但这是泛型与上述代码相适应的方式。

上述方法的用法如下所示:

showAsPopUp(currentVC: UIViewController(), currentVCname: "asdsadv", popupStoryboardID: "asd", popUpVC: SomePopUpViewController.self)
Run Code Online (Sandbox Code Playgroud)