我的代码比这稍微复杂一些,所以我创建了一个出现相同错误的示例。
当我导航到一个视图时,我有一个函数,我想用传递给这个视图的变量来执行。然后该函数生成一个数组。然后我想将该数组放入一个列表中,但出现错误。
如何获取列表以显示生成的数组?
我认为问题是 List 无法更新,因为它已经有声明的空白数组。
struct ContentView : View {
@State var array = [String]()
var body: some View {
List(self.array,id: \.self) { item in
Text("\(item)")
}
.onAppear(perform: createArrayItems)
}
func createArrayItems() {
array = ["item1", "item2", "item3", "item4", "item5"]
}
}
Run Code Online (Sandbox Code Playgroud)
小智 13
您可以将 ObservableObject 数据提供程序(例如:ViewModel)与 @Published 属性一起使用。
struct ListView: View {
@ObservedObject var viewModel = ListViewModel()
var body: some View {
NavigationView {
List(){
ForEach(viewModel.items) { item in
Text(item)
}
}
}
}
}
#if DEBUG
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ListView()
}
}
#endif
class ListViewModel: ObservableObject {
@Published var items = ["item1", "item2", "item3", "item4", "item5","item6"]
func addItem(){
items.append("item7")
}
}
Run Code Online (Sandbox Code Playgroud)
愚蠢的 UI 也是好的 UI
让你的观点保持愚蠢尝试以下代码来创建动态列表
import UIKit
import SwiftUI
import PlaygroundSupport
struct ContentView : View {
@State var array = [String]()
var body: some View {
List{
ForEach(array.identified(by: \.self)) { item in
Text("\(item)")
}
}
}
}
func createArrayItems()->[String] {
return ["item1", "item2", "item3", "item4", "item5","item6"]
}
PlaygroundPage.current.liveView = UIHostingController(rootView: ContentView(array: createArrayItems()))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14608 次 |
| 最近记录: |