我正在重构我的代码并添加对 Swift 泛型 的支持。我被编译器错误困住了。我的代码是:
func dequeueReusableViewController<T: UIViewController where T: Reusable>() -> T {
// Try to fetch view controller from the reuse queue.
if !self.viewControllerReuseQueue.isEmpty {
return self.viewControllerReuseQueue.popFirst()! as! T
}
// Ask delegate to instantiate a new view controller.
return delegate!.reusableViewControllerForPageViewController(self)
}
这编译顺利。然后,稍后,当我尝试使 View Controller 出列时:
// Get view controller from the reuse queue.
let viewController: UIViewController = self.dequeueReusableViewController()
我收到一个错误:
我该如何解决这个问题?我在 SO 上检查了类似的问题,但没有一个描述我的情况。
最佳答案
在调用返回泛型类型的泛型函数时,如果没有指定要分配给的变量的类型或将调用强制转换为该函数,则无法推断该类型。你可以做:
let viewController: SomeViewController = self.dequeueReusableViewController()
或者
let viewController = self.dequeueReusableViewController() as SomeViewController
我会推荐第一个选项,除非需要第二个选项(例如需要分配给一个 optional )。
关于ios - 无法推断通用参数 'T',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35157253/