как отслеживать и сохранять данные, переданные в мой вид 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
}
}
При нажатии кнопки сохранения переменная задачи сохраняется. Я хочу удалить кнопку сохранения и автоматически сохранять данные после изменения значения. Когда я перемещаю блок // кода сохранения данных из функции кнопки сохранения в тело var, я получаю сообщение "Функция объявляет непрозрачный тип возврата, но не имеет операторов возврата в своем теле, из которых можно вывести базовый тип" Ошибка.
enter code here
1 ответ
var body: some View {
Form {
.....
}
}
Это то, что у вас есть сейчас. И это именно то, что ожидается!
Form {
.....
}
не что иное, просто конструктор SwiftUI.Form
Оператор возврата можно опустить, потому что это только одно выражение.
var body: some View {
let somtething = ....
Form {
....
}
}
неправильно. Зачем? Сообщение об ошибке объясняет это очень ясно. "Функция объявляет непрозрачный возвращаемый тип, но не имеет операторов возврата в своем теле, из которых можно вывести базовый тип"
Эта часть сообщения об ошибке "Функция объявляет" немного непонятна, пока вы не примете в учетную запись, в чем разница между функцией и закрытием в Swift.
var body: some View {
....
}
может быть переписан как оператор func
func body()-> some View {
...
}
Может быть, когда-нибудь сообщения об ошибках компилятора станут более понятными...
Если тебе действительно нравится, ты можешь сделать
var body: some View {
let somtething = ....
return Form {
....
}
}
Мне лучше этого избежать. Для лучшей читаемости и простоты поддержки кода поместите всю логику в свою модель. Используйте SwiftUI, для которого он был разработан, и воспользуйтесь преимуществами его декларативного синтаксиса.