首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在SwiftUI的不同视图中保存列表

在SwiftUI中,可以使用以下方法在不同视图中保存列表:

  1. 使用@State属性包装器:@State属性包装器用于在视图之间共享和保存数据。您可以在父视图中创建一个@State属性,并将其传递给子视图。子视图可以读取和修改该属性,以便在不同视图之间保存列表数据。

示例代码:

代码语言:txt
复制
struct ContentView: View {
    @State private var items: [String] = []

    var body: some View {
        VStack {
            List(items, id: \.self) { item in
                Text(item)
            }
            .padding()

            AddItemView(items: $items)
        }
    }
}

struct AddItemView: View {
    @Binding var items: [String]
    @State private var newItem: String = ""

    var body: some View {
        VStack {
            TextField("Enter item", text: $newItem)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .padding()

            Button("Add Item") {
                items.append(newItem)
                newItem = ""
            }
            .padding()
        }
    }
}

在上面的示例中,ContentView视图包含一个列表和一个AddItemView视图。items属性使用@State包装器来保存列表数据。AddItemView视图使用@Binding属性包装器来读取和修改父视图中的items属性。

  1. 使用@ObservableObject和@Published属性包装器:如果需要在多个视图之间共享和保存列表数据,可以使用ObservableObject协议和@Published属性包装器。首先,创建一个ObservableObject类,并在其中声明一个@Published属性来保存列表数据。然后,在需要访问该数据的视图中,使用@ObservedObject属性包装器来观察该ObservableObject实例。

示例代码:

代码语言:txt
复制
class ItemStore: ObservableObject {
    @Published var items: [String] = []
}

struct ContentView: View {
    @ObservedObject var itemStore = ItemStore()

    var body: some View {
        VStack {
            List(itemStore.items, id: \.self) { item in
                Text(item)
            }
            .padding()

            AddItemView(itemStore: itemStore)
        }
    }
}

struct AddItemView: View {
    @ObservedObject var itemStore: ItemStore
    @State private var newItem: String = ""

    var body: some View {
        VStack {
            TextField("Enter item", text: $newItem)
                .textFieldStyle(RoundedBorderTextFieldStyle())
                .padding()

            Button("Add Item") {
                itemStore.items.append(newItem)
                newItem = ""
            }
            .padding()
        }
    }
}

在上面的示例中,ItemStore类是一个ObservableObject,其中包含一个@Published属性items来保存列表数据。ContentView视图使用@ObservedObject属性包装器来观察itemStore实例。AddItemView视图也使用@ObservedObject属性包装器来观察相同的itemStore实例。

这些方法可以在SwiftUI中保存列表数据,并在不同视图之间共享。您可以根据实际需求选择适合您的方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券