我想添加保存用户所写内容的功能,所以如果他们返回主页或关闭应用程序并重新打开它,他们所写的内容仍然存在。
下面是我正在使用的代码。我在想是不是还需要再加些什么?
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()
}
}
}
}
}
3条答案
按热度按时间fdbelqdn1#
有很多方法可以做到这一点。
一种有效的方法是使用Core Data并以一种实体可以轻松增长且不会失去一致性的方式保存信息。了解更多关于Core Data
如果您只想保存非敏感信息的小片段信息,则可以用途:
但我不建议用于生产
8wtpewkr2#
有多种方法可以为iOS实现数据持久化。最受欢迎的两个选项包括苹果创建的Core Data和目前由MongoDB拥有的Realm Swift。
核心数据
优点:
缺点:
以下是Core Data的入门指南:https://www.hackingwithswift.com/quick-start/swiftui/how-to-configure-core-data-to-work-with-swiftui
Realm Swift
优点:
缺点:
以下是Realm Swift的入门指南:https://www.mongodb.com/docs/realm/sdk/swift/swiftui-tutorial/
zmeyuzjn3#
有几种方法,这里是一些常见的:
用户默认值:“用户默认设置”是一个用于存储少量数据(如用户首选项或设置)的简单而轻量级的选项。它使用UserDefaults类以键-值对的形式存储数据。
JSON:您可以使用Foundation框架提供的API直接将数据保存到文件系统中。这包括阅读和写入各种格式的文件,如文本文件、JSON或自定义二进制格式。
核心数据:Core Data是Apple提供的一个框架,用于管理对象图并将数据持久化为SQLite数据库或其他格式。它提供了一种面向对象的方法,并支持数据验证和关系管理等高级功能。
SQLite:SQLite是一个C库,提供了一个轻量级的嵌入式关系数据库。你可以在Swift应用程序中直接使用SQLite来创建和管理本地数据库文件,以存储结构化数据。