对泛型`UIHostingController`的引用

vhmi4jdf  于 2022-10-04  发布在  Swift
关注(0)|答案(1)|浏览(109)

我目前有一个协调员,它引用了三个不同的SwiftUIUIHostingControllers。它们是连续的,因此永远不会有两个同时处于活动状态。因此,我认为我可以减少引用的数量,只保留一个通用引用。

我的代码如下所示:

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’

有没有办法完成我想做的事?

g52tjvyc

g52tjvyc1#

正如@scottm在评论中指出的那样,我能够充分利用UIHostingControllerUIViewController的子类。在我的示例中,协调员不需要知道当前视图的类型为UIHostingController

所以我的解决方案是这样的:

final class Coordinator {
    private var currentViewController: UIViewController?
}

相关问题