【问题标题】:How to define class type as param in func?如何在func中将类类型定义为参数?
【发布时间】:2015-05-06 23:48:36
【问题描述】:

我想定义附件方法,它可以转到视图控制器 喜欢 gotopage(currentController,TargetViewController,"targetidentify")

   class func gotoPage<T: UIViewController>(currentController:ViewController,targetControllerClass: T.Type,identify:String){
        var mTargetViewController:targetControllerClass  =  currentController.storyboard?.instantiateViewControllerWithIdentifier(identify) as! targetControllerClass
        currentController.showViewController(mTargetViewController, sender: currentController)
    }

Here 是我引用的另一个类似问题。 问题是 as! targetControllerClass 可能不正确。 并在构建时出错:“targetControllerClass”不是一种类型。 如何用 Class Type 定义这个方法?

【问题讨论】:

  • 为什么这是一个泛型?什么将指定 T?
  • 可能与here 重复。可能需要将 更改为 ,其中协议公开了一个 init() 方法。
  • 我已经更新了我的问题。
  • 我已经检查过这个问题,但似乎不正确。
  • 什么是selfsender?这是class 方法对吗?

标签: ios swift generics


【解决方案1】:

所有视图控制器都将继承自UIViewController,前提是您可以按如下方式调整您的方法:

func gotoPage<T>(currentController: UIViewController, targetControllerClass: T.Type, identify: String) {
    var newController = currentController.storyboard?.instantiateViewControllerWithIdentifier(identify) as! UIViewController
    if newController is T {
        currentController.showViewController(newController, sender: currentController)
    }
}

你可以这样称呼它:

gotoPage(self, targetControllerClass: UIPageViewController.self, identify: "test")

但是,在这里添加泛型并不是很有用。

【讨论】:

  • 泛型的奇怪语法。 targetControllerClass 似乎是这里的 externalParameterName 而不是 localParameterName
猜你喜欢
  • 2021-08-11
  • 1970-01-01
  • 2023-03-28
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
  • 2010-12-17
相关资源
最近更新 更多