繁体   English   中英

Swift泛型,不能推断出T型

[英]Swift generics, cannot infer type T

我尝试了很多不同的东西,但我不擅长仿制药。 如何调用一个函数,该函数需要一个像UIViewController这样的实体类型的变量,以及符合像NavBarResponder这样的协议? 谢谢!

weak var lastNavBarResponder: UIViewController?

func reloadExtendedNavBar() {
    self.updateState()
    self.updateStatusBadges()
    if let vc = self.lastNavBarResponder {
        self.setup(viewController: vc) // Error: Generic parameter T cannot be inferred
    }
}

func setup<T: UIViewController>(viewController: T) where T: NavBarResponder {
...

我怀疑错误是因为UIViewController自然不符合NavBarResponder ,因此编译器无法保证lastNavBarResponder符合setup的要求。

尝试将lastNavBarResponder更改为符合NavBarResponder协议的UIViewController类型。

这是一个自包含的示例,显示了如何实现它。

protocol NavBarResponder {}

class NavBarResponderController: UIViewController {}
extension NavBarResponderController: NavBarResponder {}

var lastNavBarResponder: NavBarResponderController? = NavBarResponderController()

func setup<T: UIViewController>(viewController: T) where T: NavBarResponder {
    print("Works")
}

func reloadExtendedNavBar() {

    if let vc = lastNavBarResponder {
        setup(viewController: vc) 
    }
}

reloadExtendedNavBar()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM