Swift泛型,无法推断类型T
我试过很多不同的方法,但我不擅长泛型。 我如何调用一个变量既需要是实体类型(如Swift泛型,无法推断类型T,swift,generics,Swift,Generics,我试过很多不同的方法,但我不擅长泛型。 我如何调用一个变量既需要是实体类型(如UIViewController)又需要符合协议(如NavBarResponder)的函数? 谢谢 弱变量响应者:UIViewController? func重载ExtendedNavBar(){ self.updateState() self.updateStatusBadges() 如果让vc=self.lastNavBarResponder{ self.setup(viewController:vc)//错误:无
UIViewController
)又需要符合协议(如NavBarResponder
)的函数?
谢谢
弱变量响应者:UIViewController?
func重载ExtendedNavBar(){
self.updateState()
self.updateStatusBadges()
如果让vc=self.lastNavBarResponder{
self.setup(viewController:vc)//错误:无法推断通用参数T
}
}
func设置(viewController:T),其中T:NavBarResponder{
...
我怀疑错误是因为UIViewController
不符合NavBarResponder
,因此编译器无法保证lastNavBarResponder
符合设置的要求
尝试将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()
protocol-NavBarResponder{}
类NavBarResponderController:UIViewController{}
扩展NavBarResponderController:NavBarResponder{}
var lastNavBarResponder:NavBarResponderController?=NavBarResponderController()
func设置(viewController:T),其中T:NavBarResponder{
印刷品(“作品”)
}
func重载ExtendedNavBar(){
如果让vc=lastNavBarResponder{
设置(viewController:vc)
}
}
重新加载ExtendedNavBar()
我怀疑错误是因为UIViewController
不符合NavBarResponder
,因此编译器无法保证lastNavBarResponder
符合设置的要求
尝试将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()
protocol-NavBarResponder{}
类NavBarResponderController:UIViewController{}
扩展NavBarResponderController:NavBarResponder{}
var lastNavBarResponder:NavBarResponderController?=NavBarResponderController()
func设置(viewController:T),其中T:NavBarResponder{
印刷品(“作品”)
}
func重载ExtendedNavBar(){
如果让vc=lastNavBarResponder{
设置(viewController:vc)
}
}
重新加载ExtendedNavBar()
您使用的是哪种Swift版本?您使用的是哪种Swift版本?谢谢您的帮助!我尝试了这一点,但现在似乎我需要使当前为UIViewController
的每个类都符合NavBarResponder
这个新类,NavBarResponderController
。否则我无法分配lastNavBarRes思考
。还有其他方法吗?谢谢你的帮助!我尝试了这个方法,但现在似乎我需要使当前是UIViewController
的每个类都符合NavBarResponder
这个新类,NavBarResponderController
。否则我无法分配lastNavBarResponder
。还有其他方法吗?