无法推断通用参数“T”

Raf*_*fAl 4 generics ios swift

我正在重构我的代码并添加对 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)
}
Run Code Online (Sandbox Code Playgroud)

这编译顺利。然后,稍后,当我尝试使视图控制器出列时:

// Get view controller from the reuse queue.
let viewController: UIViewController = self.dequeueReusableViewController()
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

无法推断通用参数“T”

我该如何解决这个问题?我在 SO 上检查了类似的问题,但没有一个描述我的情况。

Joe*_*Joe 5

在调用返回泛型类型的泛型函数时,无法推断类型,而未指定要分配给的变量的类型或将调用强制转换为函数。你可以做:

let viewController: SomeViewController = self.dequeueReusableViewController()
Run Code Online (Sandbox Code Playgroud)

或者

let viewController = self.dequeueReusableViewController() as SomeViewController
Run Code Online (Sandbox Code Playgroud)

我会推荐第一个选项,除非需要第二个选项(例如需要分配给一个可选选项)。