我目前有一个协调员,它引用了三个不同的SwiftUIUIHostingController
s。它们是连续的,因此永远不会有两个同时处于活动状态。因此,我认为我可以减少引用的数量,只保留一个通用引用。
我的代码如下所示:
final class Coordinator {
private var currentIntroViewHost: UIHostingController<AnimationIntroView>?
private var currentNoValidTicketsViewHost: UIHostingController<NoValidTicketsView>?
private var currentErrorViewHost: UIHostingController<ErrorViewSwiftUI>?
}
我想要实现的是:
final class Coordinator {
private var currentViewHost: UIHostingController<View>?
}
然而,使用这三种视图都遵循的协议似乎行不通。我试了一下,是这样的:
protocol GenericView: SwiftUI.View {}
final class Coordinator {
private var currentViewHost: UIHostingController<GenericView>?
}
我收到编译器错误:
类型‘Any GenericView’不能符合‘View’
有没有办法完成我想做的事?
1条答案
按热度按时间g52tjvyc1#
正如@scottm在评论中指出的那样,我能够充分利用
UIHostingController
是UIViewController
的子类。在我的示例中,协调员不需要知道当前视图的类型为UIHostingController
。所以我的解决方案是这样的: