如何跟踪和保存传递到我的视图 SwiftUI 中的数据
Posted
技术标签:
【中文标题】如何跟踪和保存传递到我的视图 SwiftUI 中的数据【英文标题】:how to track and save the data passed into my view SwiftUI 【发布时间】:2020-02-07 19:43:37 【问题描述】:我正在编写一个待办事项列表应用程序,这是我的代码:
struct TaskItem: View
@State var task : Task
@Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>
@EnvironmentObject var taskData: UserData
@ObservedObject private var keyboard = KeyboardResponder()
var body: some View
Form
Section(header: Text("Details").font(.headline))
HStack
TextField("Title", text: $task.title ).font(Font.headline)
TextField("Description", text: $task.description)
.font(Font.body)
Section
Toggle("Mark as Done", isOn: $task.isDone)
Section
Picker(selection: $task.priority, label: Text("priority"))
Text("very important").tag(2)
Text("important").tag(1)
Text("need to do").tag(0)
.pickerStyle(SegmentedPickerStyle()).padding(5)
.padding(.bottom, keyboard.currentHeight)
.edgesIgnoringSafeArea(.bottom)
.animation(.easeOut(duration: 0.16))
.navigationBarItems(trailing: Button(action:
//save data
var result :[Task]
result = save(id: self.task.id,
creationDate: self.task.creationDate,
creationDateYear: self.task.creationDateYear,
creationDateMonth: self.task.creationDateMonth,
creationDateDay: self.task.creationDateDay,
dueDate: self.task.dueDate,
time: self.task.time,
title: self.task.title,
description: self.task.description,
priority: self.task.priority,
isDone: self.task.isDone, taskData: self.taskData.taskData)
self.taskData.taskData = result
self.presentationMode.wrappedValue.dismiss()
, label:
Text("save")
))
// here I put my save code
当按下保存按钮时,任务的变量被保存。我想删除保存按钮并在更改值后自动保存数据。当我将 // save data code 块从 save button 函数中移出并放入 var body 时,我得到 "Function 声明了一个不透明的返回类型,但在其主体中没有返回语句可以从中推断基础类型” 错误。
enter code here
【问题讨论】:
你能解释一下关于写入正文是什么意思以及错误是什么 当我将 // 保存数据代码块从保存按钮功能移到正文中时,我得到“函数声明了一个不透明的返回类型,但它的正文中没有返回语句可以从中推断底层类型” 【参考方案1】:var body: some View
Form
.....
就是你现在拥有的。这正是预期的结果!
Form
.....
没有别的,只是SwiftUI.Form的构造函数
return 语句可以省略,因为它只有一个表达式。
var body: some View
let somtething = ....
Form
....
错了。为什么?错误信息解释得很清楚。 "函数声明了一个不透明的返回类型,但它的主体中没有返回语句来推断基础类型"
这部分错误信息“Function declares”有点不清楚,直到你考虑一下,Swift中的函数和闭包有什么区别。
var body: some View
....
可以改写为func语句
func body()-> some View
...
也许,有一天,编译器的错误信息会更清楚......
如果你真的喜欢,你可以做
var body: some View
let somtething = ....
return Form
....
我最好避免这种情况。为了更好的可读性和易于维护您的代码,请将所有逻辑放入您的模型中。使用 SwiftUI 的设计初衷,并利用其声明式语法。
【讨论】:
谢谢,我将把逻辑取出到我的模型中,并把保存功能放在那里以上是关于如何跟踪和保存传递到我的视图 SwiftUI 中的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 中的 PageViewController 中传递一些视图?