[英]swiftUI: Changing @State in onAppear crashes
如果通過調用服務出現視圖,我想設置一個@State 變量。
在onAppear
調用服務onAppear
應用程序崩潰。
在按鈕操作中調用服務工作正常。
struct ContentView: View {
@State var dirContent : [String] = []
var body: some View {
VStack {
List {
ForEach(dirContent, id: \.self){
fileName in
Text(fileName)
}
}
Button("Get Data"){self.dirContent = Service.getData()}
}
.onAppear{
//self.dirContent = Service.getData2() // Crashes!!
}
}
}
class Service{
static func getData()->[String]{
// ... get Data from somewhere
return ["line1", "line2"]
}
static func getData2()->[String]{
// ... get Data from somewhere
return ["line4", "line5"]
}
}
怎么了?
了解為什么會發生這種情況,請嘗試修改您的代碼
var body: some View {
VStack {
List {
ForEach(dirContent, id: \.self){
fileName in
Text(fileName).onAppear {
print("item appear")
}
}
}.onAppear {
print("list appear")
}
Button("Get Data"){self.dirContent = Service.getData()}
}
.onAppear{
print("content appear")
DispatchQueue.main.async {
self.dirContent = Service.getData2()
}
}
}
“老派”調試打印向我們展示了
content appear
list appear
item appear
item appear
現在很清楚了,不是嗎?
我想我明白了。 該操作必須異步調用。
.onAppear{
DispatchQueue.main.async {
self.dirContent = Service.getData2()
}
}
任何想法,為什么在按鈕操作中不需要這個?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.