swiftui - 文本更改后列表未更新
问题描述
我确定我做错了什么,但我不知道是什么。
我有一个小列表,我用一个计时器更新文本,我可以在更新的调试器中看到它。但名单不会更新...
谢谢你的帮助。
struct ListTest: View {
@State var texts : [String]
var body: some View {
List {
ForEach(self.texts, id: \.self) { text in
Text(text)
}
}
}
}
struct ContentView: View {
@State var texts = ["a"]
var body: some View {
ListTest(texts: self.texts)
.onAppear() {
Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { (timer) in
self.texts.append("\(self.texts.count)")
print(self.texts)
}
}
}
}
解决方案
从 ListTest 中删除 @State 属性包装器
struct ListTest: View {
var texts : [String]
var body: some View {
List {
ForEach(self.texts, id: \.self) { text in
Text(text)
}
}
}
}
最后,想想更多“组合兼容”的代码
import SwiftUI
struct ListTest: View {
var texts: [String]
var body: some View {
List {
ForEach(self.texts, id: \.self) { text in
Text(text)
}
}
}
}
struct ContentView: View {
@State var texts = ["a"]
let tp = Timer.publish(every: 0.5, on: .main, in: .default).autoconnect()
var body: some View {
ListTest(texts: self.texts)
.onReceive(tp) { (date) in
self.texts.append("\(self.texts.count)")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
这在功能上是相等的
推荐阅读
- reactjs - 如何获取 ReactJS 材料表搜索结果计数
- forms - 无法重置/清除面板和数据表中的值 -
我有一个表格,并且在表格中我有 ap:dialog - searchGameDetails.xhtml
主窗体.xhtml
<h:form id="newApplication" enctype="multipart/form-data"> </h:form> <p:dia
- javascript - AddEventListener 不会在鼠标悬停时触发该功能
- javascript - 嵌入可以访问本地存储的 reactjs 应用程序
- javascript - 单击引导程序 4 选项卡链接会导致 angularJS 控制器刷新
- ios - Swift - 我可以从另一部智能手机访问 SQLITE 吗?
- javascript - Javascript:具有不同键类型的数组中出现意外的空元素?
- javascript - 嵌套 V-For 活动类
- jquery - ajax请求返回错误时将表单中的字段设置为无效的规则
- php - 谷歌访问令牌对 php 客户端无效