簡體   English   中英

如何跟蹤和保存傳遞到我的視圖 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 時,我得到“函數聲明了一個不透明的返回類型,但其主體中沒有可以從中推斷出基礎類型的返回語句”錯誤。

enter code here

在此處輸入圖片說明

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

是你現在擁有的。 這正是預期的結果!

Form {
    .....
}

沒有別的,只是SwiftUI.Form 的構造函數

return語句可以省略,因為它只是一個表達式

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

是錯的。 為什么? 錯誤消息非常清楚地解釋了它。 函數聲明了一個不透明的返回類型,但在其主體中沒有返回語句來推斷底層類型

這部分錯誤信息“ Function Declarations ”有點不清楚,直到你記下,Swift中的函數和閉包有什么區別。

var body: some View {
    ....
}

可以重寫為 func 語句

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

也許有一天,編譯器的錯誤信息會更清楚......

如果你真的喜歡,你可以做

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

我最好避免這種情況。 為了更好的可讀性和易於維護您的代碼,請將所有邏輯放入您的模型中。 使用 SwiftUI,因為它是專為並利用其聲明性語法而設計的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM