【发布时间】:2019-11-18 04:45:13
【问题描述】:
我正在实现一个名为MenuItem 的非常 自定义 NavigationLink,并希望在整个项目中重复使用它。这是一个符合View 并实现var body : some View 的结构,其中包含NavigationLink。
我需要以某种方式将应由NavigationLink 呈现的视图存储在MenuItem 的正文中,但尚未这样做。
我在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...
}
}
--> 错误: 协议“视图”只能用作通用约束,因为它具有自身或关联的类型要求。
第二次尝试:
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”的值分配给类型“某些视图”。
最后的尝试:
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...
}
}
--> 错误: 无法将类型“视图”的值分配给类型“某些视图”。
我希望有人可以帮助我。如果 NavigationLink 可以接受某些 View 作为参数,则必须有一种方法。 谢谢;D
【问题讨论】:
-
我很难“可视化”您的问题。让我知道我错在哪里。您有一个名为
MenuItem的视图...它是另一个视图的一部分,它是NavigationLink的目的地?这就是全部?如果是这样,为什么不创建一个具有MenuItem视图并且是NavigationLink目标的MainMenu视图?编辑:你能举一个“具体”的例子来说明你试图用文字做什么吗?我想让我感到困惑的是? (顺便问下好问题。我只是不明白你真正想要输出什么。) -
嘿@dfd!感谢您的回复;D 我已经更新了第一段,以更好地反映我正在尝试做的事情,即创建
NavigationLink的替代方案MenuItem。 @rraphael 给出了正确的答案,现在一切都按预期工作。泛型是进一步查找的重要关键字。
标签: swift generics view protocols swiftui