Trying to finalize my app but I'm getting an error message (closure containing a declaration cannot be used with result builder 'ViewBuilder') on my func addEntry [highlighted]. Meed to know what am I missing here so I can preview and continue development. I'm totally beginner here and build this code searching on several sites. Any help more than welcome -- code below--
import SwiftUI
import MessageUI
import Foundation
struct ContentView: View {
struct InventoryEntry: Identifiable {
var id = UUID()
let parkingSpot: String
let trailerNumber: String
let tagID: String
let spotType: String
let date: String
}
@State private var selectedOption = 0
@State private var parkingSpot = ""
@State private var trailerNumber = ""
@State private var tagID = ""
@State private var selectedRadio = 0
@State private var entries: [InventoryEntry] = []
@State private var isMailComposerPresented = false
@State private var isErrorMessageShown = false
@State private var errorMessage = ""
@State private var id = ""
var body: some View {
NavigationView {
Form {
Picker(selection: $selectedOption, label: Text("Yard Selection")) {
Text("1").tag(0)
Text("2").tag(1)
Text("3").tag(2)
Text("4").tag(3)
}
TextField("Parking Spot Number", text: $parkingSpot)
TextField("Trailer Number", text: $trailerNumber)
TextField("Tag ID", text: $tagID)
Picker(selection: $selectedRadio, label: Text("Spot Type")) {
Text("Regular Spot").tag(0)
Text("Overflow Spot").tag(1)
}.pickerStyle(SegmentedPickerStyle())
VStack {
Button(action: addEntry) {
Text("Add Entry")
}
Button(action: clearLastEntry) {
Text("Clear Last Entry")
}
Button(action: finalizeInventory) {
Text("Finalize Inventory")
}
}
List {
ForEach(entries) { entry in
Text("(entry.parkingSpot), (entry.trailerNumber), (entry.tagID), (entry.spotType), (entry.date)")
}
}
Text("Total Trailers Counted: (entries.count)")
}
.navigationBarTitle("YMS Inventory Tool")
}
__ func addEntry() {
let entry = InventoryEntry(parkingSpot: parkingSpot,
trailerNumber: trailerNumber,
tagID: tagID,
spotType: selectedRadio == 0 ? "Regular Spot" : "Overflow Spot",
date: "(Date())",
id: id)
entries.append(entry)
}__
func clearLastEntry() {
entries.removeLast()
}
func finalizeInventory() {
let csvString = self.entries.map { entry in
"(entry.parkingSpot),(entry.trailerNumber),(entry.tagID),(entry.spotType),(entry.date),(entry.id)"
}.joined(separator: "\n")
let filename = "InventoryData.csv"
let filePath = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(filename)
let data = csvString.data(using: .utf8)
do {
try csvString.write(to: filePath, atomically: true, encoding: .utf8)
print("Inventory data saved to (filePath)")
} catch {
self.errorMessage = "Error saving inventory data: (error.localizedDescription)"
// Show the error message
let alert = UIAlertController(title: "Error", message: self.errorMessage, preferredStyle: .alert)
let dismissAction = UIAlertAction(title: "Dismiss", style: .default, handler: nil)
alert.addAction(dismissAction)
self.present(alert, animated: true, completion: nil)
}
}
}
}
struct Previews_ContentView_Previews: PreviewProvider {
static var previews: some View {
/@START_MENU_TOKEN@/Text("Hello, World!")/@END_MENU_TOKEN@/
}
}
Selecting any option will automatically load the page