【发布时间】:2021-09-12 22:51:00
【问题描述】:
我正在尝试根据提供给视图的通用数据在 init() 内动态确定 SwiftUI 的 NavigationLink 的目的地。
根据下面的代码,如果Item 是Tour,则目标应为TourDetailView,否则为LocationDetailView。
struct CardView<Item: CardItem>: View {
let card: Item
private let destination: T
init(card: Item) {
self.card = card
if Item.self == Tour.self {
destination = TourDetailView(tour: card as! Tour) as! T
} else {
destination = LocationDetailView(location: card as! Location) as! T
}
}
var body: some View {
NavigationLink(destination: destination) {
...
}
}
}
现在代码没有编译,因为T 没有定义。如果我将T 定义为:
struct CardView<Item: CardItem, T: View>: View {
CardView 已处理,但随后我必须编辑调用 CardView 的视图,这都会引入不必要的复杂性,最终我必须在 @main 中定义 T,这是不允许的。
我怎样才能实现我想要的?我试图让destination 成为另一种类型,但没有成功。
【问题讨论】:
-
这个话题应该很有帮助stackoverflow.com/questions/61304700/….
-
接受的答案解决了 ym 问题。实际上,我在自己之前尝试过
AnyView,但试图远离它以获得更优雅的解决方案。你的建议可能对我有帮助。谢谢。 @Asperi
标签: swiftui swiftui-navigationlink