如何保存用户在SwiftUI应用中写的内容?

n53p2ov0  于 2023-05-16  发布在  Swift
关注(0)|答案(3)|浏览(170)

我想添加保存用户所写内容的功能,所以如果他们返回主页或关闭应用程序并重新打开它,他们所写的内容仍然存在。

下面是我正在使用的代码。我在想是不是还需要再加些什么?

struct LandingView: View {
    @State private var oldLandingName: String = ""
    @State private var newLandingName: String = ""
    @State private var isAddingLanding = false
    @State private var landings: [String] = []
    @State private var isEditing = false
    
    var body: some View {
        NavigationView {
            ZStack {
                Color.blue.ignoresSafeArea()
                Circle()
                    .scale(1.7)
                    .foregroundColor(.yellow.opacity(0.60))
                Circle()
                    .scale(1.3)
                    .foregroundColor(.blue.opacity(0.50))
                
                VStack {
                    HStack {
                        Text("Add Your Travels")
                            .bold()
                        Spacer()
                        Button(action: {
                            isAddingLanding = true
                        }) {
                            Image(systemName: "plus")
                                .resizable()
                                .frame(width: 20, height: 20)
                                .foregroundColor(.white)
                        }
                    }
                    .padding(.horizontal)
                    
                    List(landings, id: \.self) { landing in
                        Text(landing).bold()
                            .foregroundColor(.white)
                            .listRowBackground(Color.clear)
                            .listRowSeparatorTint(.blue)
                            .onTapGesture {
                                self.isEditing = true
                                self.oldLandingName = landing
                                self.newLandingName = landing
                            }
                    }
                    .listStyle(.plain)
                }
                
            }
            .navigationBarTitle(Text("Landings!"))
            
            .fullScreenCover(isPresented: $isAddingLanding, onDismiss: {}) {
                VStack {
                    TextField("Where did you go? \(newLandingName)", text: $newLandingName)
                        .textFieldStyle(RoundedBorderTextFieldStyle())
                        .padding()
                    Button("Add") {
                        if !newLandingName.isEmpty {
                            landings.append(newLandingName)
                            newLandingName = ""
                        }
                        isAddingLanding = false
                    }
                    Color.blue.ignoresSafeArea()
                }
            }
            .fullScreenCover(isPresented: $isEditing, onDismiss: {}) {
                VStack {
                    TextField("", text: $newLandingName)
                        .textFieldStyle(RoundedBorderTextFieldStyle())
                        .padding()
                    Button("Update") {
                        if !newLandingName.isEmpty {
                            if let idx = landings.firstIndex(where: { $0 == $oldLandingName.wrappedValue }) {
                                self.landings[idx] = newLandingName
                            }
                        }
                        isEditing = false
                    }
                    Color.blue.ignoresSafeArea()
                }
            }
            
        }
    }
}
fdbelqdn

fdbelqdn1#

有很多方法可以做到这一点。
一种有效的方法是使用Core Data并以一种实体可以轻松增长且不会失去一致性的方式保存信息。了解更多关于Core Data
如果您只想保存非敏感信息的小片段信息,则可以用途:

@AppStorage("propertyName") private var cityName = ""

但我不建议用于生产

8wtpewkr

8wtpewkr2#

有多种方法可以为iOS实现数据持久化。最受欢迎的两个选项包括苹果创建的Core Data和目前由MongoDB拥有的Realm Swift。

核心数据

优点:

  • 由Apple创建
  • 支持复杂的数据结构
  • 更轻松地与CloudKit集成

缺点:

  • 需要更多设置
  • 可能很复杂

以下是Core Data的入门指南:https://www.hackingwithswift.com/quick-start/swiftui/how-to-configure-core-data-to-work-with-swiftui

Realm Swift

优点:

  • 更易于使用
  • 声称更快

缺点:

  • 不是由Apple开发的,因此新的操作系统功能可能需要更长的时间才能获得支持

以下是Realm Swift的入门指南:https://www.mongodb.com/docs/realm/sdk/swift/swiftui-tutorial/

zmeyuzjn

zmeyuzjn3#

有几种方法,这里是一些常见的:

用户默认值:“用户默认设置”是一个用于存储少量数据(如用户首选项或设置)的简单而轻量级的选项。它使用UserDefaults类以键-值对的形式存储数据。
JSON:您可以使用Foundation框架提供的API直接将数据保存到文件系统中。这包括阅读和写入各种格式的文件,如文本文件、JSON或自定义二进制格式。
核心数据:Core Data是Apple提供的一个框架,用于管理对象图并将数据持久化为SQLite数据库或其他格式。它提供了一种面向对象的方法,并支持数据验证和关系管理等高级功能。
SQLite:SQLite是一个C库,提供了一个轻量级的嵌入式关系数据库。你可以在Swift应用程序中直接使用SQLite来创建和管理本地数据库文件,以存储结构化数据。

相关问题