Обязательно заключите оператор в Group
и используйте if
, чтобы проверить, доступно ли содержимое или нет. Обязательно используйте onAppear
на Group
. Примерно так (протестировано и работает над iOS 13.5):
struct ContentView: View {
@State var stringArray: Array<String> = []
func getSomeInformation() {
// Wait for 2 seconds then append items
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.stringArray.append("a")
self.stringArray.append("b")
self.stringArray.append("c")
}
}
var body: some View {
Group { // Group all
if self.stringArray.count > 0 { // Use if statement to check for content
NavigationView() {
List() {
ForEach(self.stringArray, id: \.self) { item in
Text(item).foregroundColor(Color.black)
}
}
}
}
}.onAppear() {
self.getSomeInformation()
}
}
}
Есть способ использовать это без операторов Group
и if
. Используйте id
внутри оператора ForEach, чтобы он мог различать guish и обновлять представление, если изменения на @State
происходят следующим образом:
struct ContentView: View {
@State var stringArray: Array<String> = []
func getSomeInformation() {
// Wait for 2 seconds then append items
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.stringArray.append("a")
self.stringArray.append("b")
self.stringArray.append("c")
}
}
var body: some View {
NavigationView() {
List() {
ForEach(self.stringArray, id: \.self) { item in
Text(item).foregroundColor(Color.black)
}
}
}.onAppear() {
self.getSomeInformation()
}
}
}