как отследить и сохранить данные, переданные на мой взгляд SwiftUI - PullRequest
1 голос
/ 07 февраля 2020

Я пишу приложение со списком задач и вот мой код:

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

enter image description here

1 Ответ

0 голосов
/ 07 февраля 2020
var body: some View {
    Form {
    .....
    }
}

Это то, что у вас есть сейчас. И это именно то, что ожидается!

Form {
    .....
}

- это ничто иное, просто конструктор SwiftUI.Form

Оператор return может быть опущен, потому что это только одно выражение .

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

неверно. Почему? Сообщение об ошибке объясняет это очень четко. " Функция объявляет непрозрачный тип возврата, но в ее теле нет операторов возврата, из которых можно вывести базовый тип "

Эта часть сообщения об ошибке " Функция объявляет"немного неясно, пока вы не примете во внимание, в чем разница между функцией и замыканием в Swift.

var body: some View {
    ....
}

можно переписать как забавный c оператор

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

Возможно, когда-нибудь сообщения об ошибках от компилятора станут более понятными ...

Если вам действительно нравится, вы можете сделать

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

Я бы лучше этого избегал. Для лучшей читабельности и простоты обслуживания кода поместите все логи c в вашу модель. Используйте SwiftUI так, как он был спроектирован, и используйте его декларативный синтаксис.

...