swift - 在 SwiftUI 中修改变量
问题描述
假设我有这个代码:
var n = 3
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
struct ContentView: View {
var body: some View {
Text(String(arr[n])
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我想设置arr[n]
为 100。我将在哪里以及如何执行此操作?我不能把它放在数组声明之后,因为它是顶级的,我不能把它放在 ContentView 结构中。
我是 Swift 的新手,所以如果我能得到解释,那将非常有帮助。
编辑:另外,如果我有这个代码:
var n = 3
struct ContentView: View {
@State var arr[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var body: some View {
Text(String(self.arr[n])
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我可以放在self.arr[n] = 0
哪里?
解决方案
SwiftUI 是一个声明式接口。为了运行代码,您需要捕获一些事件,例如.onAppear
or .onTapGesture
:
var n = 3
struct ContentView: View {
@State private var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var body: some View {
Text(String(arr[n])).onTapGesture {
self.arr[n] = 100
}
}
}
当 this 首次显示时,arr[3]
is4
和 that 的值显示在屏幕中间。
当4
被点击时,随后的闭包.onTapGesture
运行并且arr[3]
值被更新为100
,并且因为arr
是一个@State
变量,视图将使用新值重绘自己。
如果在您的第一个示例arr
中声明了ContentView
like 之外,那么更新它不会导致ContentView
重绘。
推荐阅读
- button - Plotly:如何为每个子图添加下拉菜单?
- oauth-2.0 - 如何在不通过 EWSManagedAPI 使用代理生成的类 (ExchangeServicePortTypeClient) 调用 EWS 端点时传递令牌
- r - ggplot饼图外的文本标签
- java - Vertx 事件总线回复处理程序未为特定调用调用
- angular - Angular Tour Of Heroes 输入属性“不是已知属性”错误
- php - 教义重构实体
- android - 按 Google Play 开发者控制台上的 AR 支持过滤?
- swiftui - ObservableObject 中的 @Published 属性是否会更新它的所有视图?
- pandas - 从 pandas 数据框中查找过滤后的 numpy 数组中的列标签
- python - 如何从 Telegram 机器人控制台记录错误