如何跟踪和保存传递到我的视图 SwiftUI 中的数据

how to track and save the data passed into my view SwiftUI

我正在编写一个待办事项列表应用程序,这是我的代码:

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 代码块移出保存按钮功能并移入 var body 时,出现 "Function declares an opaque return type, but has no return statements in its body from which to infer an underlying type" 错误.

enter code here

var body: some View {
    Form {
    .....
    }
}

就是你现在拥有的。这正是预期的结果!

Form {
    .....
}

没有别的,只是SwiftUI.Form

的构造函数

return语句可以省略,因为只有一个表达式.

var body: some View {
    let somtething = ....
    Form {
        ....
    }
}

错了。为什么?错误消息解释得很清楚。 “函数声明了一个不透明的 return 类型,但在其主体中没有 return 语句可从中推断出基础类型

错误信息“Function declares”这部分有点不清楚,等你算了算,[=48=中的函数和闭包有什么区别].

var body: some View {
    ....
}

可以重写为 func 语句

func body()-> some View {
    ...
}

也许有一天,编译器的错误信息会更清楚...

如果你真的喜欢,可以

var body: some View {
    let somtething = ....
    return Form {
        ....
    }
}

我最好避免这种情况。为了更好的可读性和易于维护你的代码,把所有的逻辑放到你的模型中。使用 SwiftUI,因为它是专为并利用其声明性语法而设计的。