[英]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.