我有以下观点(删除无关部分):
struct Chart : View {
var xValues: [String]
var yValues: [Double]
@State private var showXValues: Bool = false
var body = some View {
...
if showXValues {
...
} else {
...
}
...
}
}
然后我想添加一个方法从外部修改这个值,所以我添加了一个函数:
func showXValues(show: Bool) -> Chart {
self.showXValues = show
return self
}
所以我从外部构建图表视图,如下所示:
Chart(xValues: ["a", "b", "c"], yValues: [1, 2, 3])
.showXValues(true)
但它的工作原理就像值仍然为false一样。我做错了什么?我认为更新@State变量应该更新视图。总的来说,我对Swift相当陌生,对SwiftUI更是如此,我是否遗漏了某种应该在这里使用的特殊技术?
2条答案
按热度按时间5cg8jx4n1#
正如在评论中提到的,
@Binding
是要走的路。下面是一个最小的示例,用代码展示了这个概念:
inn6fuwd2#
没有必要创建
func
-s.我所要做的就是不把属性标记为private,而是给予它们一个初始值,这样它们在构造函数中就变成可选的了.所以用户可以指定它们,或者不关心.就像这样:var showXLabels: Bool = false
这样,构造函数就是
Chart(xLabels:yLabels)
或Chart(xLabels:yLabels:showXLabels)
。这个问题与“国家”无关。