我正在实现一个非常自定义的导航链接,称为MenuItem
,并希望在整个项目中重复使用它。这是一个符合View
协议并实现var body : some View
的结构体,其中包含一个NavigationLink
。
我需要以某种方式存储将由NavigationLink
呈现的视图,但尚未成功实现。
我已在MenuItem
的主体中定义了destinationView
作为some View
,并尝试了两个初始化程序:
这似乎太简单了:
struct MenuItem: View {
private var destinationView: some View
init(destinationView: View) {
self.destinationView = destinationView
}
var body : some View {
// Here I'm passing destinationView to NavigationLink...
}
}
--> 错误: 协议“View”只能作为泛型约束使用,因为它具有Self或相关类型要求。
第二次尝试:
struct MenuItem: View {
private var destinationView: some View
init<V>(destinationView: V) where V: View {
self.destinationView = destinationView
}
var body : some View {
// Here I'm passing destinationView to NavigationLink...
}
}
--> 错误:无法将类型为'V'的值分配给类型为'some View'。
最后尝试:
struct MenuItem: View {
private var destinationView: some View
init<V>(destinationView: V) where V: View {
self.destinationView = destinationView as View
}
var body : some View {
// Here I'm passing destinationView to NavigationLink...
}
}
--> 错误:无法将类型为“View”的值分配给类型为“some View”。
我希望有人能够帮助我。如果NavigationLink可以接受一些视图作为参数,那肯定有办法的。 谢谢 ;D
MenuItem
的视图......它是另一个视图的一部分,后者是NavigationLink
的目标吗?就这样吗?如果是这样,为什么不只创建一个MainMenu
视图,它具有MenuItem
视图并且是你的NavigationLink
的目的地?编辑:你能用"具体的"话来给出你想要做的例子吗?我认为让我感到困惑的是什么?(好问题,顺便说一句。只是我认为我不明白你实际想要的输出是什么。) - user7014451NavigationLink
的内容。 @rraphael给出了正确的答案,现在一切都按预期工作。泛型是进一步查找的重要关键字。 - Alex