Salut à tous
je bloque sur un truc peut etre tout bête, mais je trouve pas le principe
j’ai une fonction qui me calcule un résultat à partir d’un mlmodel et que j’affiche dans l’app via une alerte.
la fonction :
func calculateBedTime() {
let model = SleepCalculator()
let components = Calendar.current.dateComponents([.hour, .minute], from: wakeUp)
let hour = (components.hour ?? 0) * 60 * 60
let minute = (components.minute ?? 0) * 60
do {
let prediction = try model.prediction(wake: Double(hour + minute), estimatedSleep: sleepAmount, coffee: Double(coffeeAmount))
let sleepTime = wakeUp - prediction.actualSleep
let formater = DateFormatter()
formater.timeStyle = .short
alertMessage = formater.string(from: sleepTime)
alertTitle = "Your ideal bedtime is ..."
} catch {
alertTitle = "Error"
alertMessage = "Sorry, there was a probleme calculating your bedtime."
}
showingAlert = true
}
l’alerte :
.navigationBarItems( trailing: Button(action: calculateBedTime, label: { Text("Calculate") })) .alert(isPresented: $showingAlert) { Alert(title: Text(alertTitle), message: Text(alertMessage), dismissButton: .default(Text("OK"))) }
tout ça fonctionne, mais j’ai un souci si je veux afficher le résultat de ma fonction avec un Text tout simple, sans passer par une alerte.
Je précise que j’ai un bouton qui lance la fonction et affiche l’alerte, comment faire sans bouton et sans alerte pour que le résultat apparaisse « en direct » avec un Text.
j’ai essayé de transformer la fonction comme ça :
func calculateBedTime() -> String { ... return monMessage }
avec le l’affichage suivant :
Text(calculateBedTime())
mais le texte reste désespérement vide. Par contre, j’ai un affichage si je fais return « OK » dans ma fonction.
Je pense que la fonction ne doit pas s’exécuter et c’est pour ça que monMessage reste vide mais je ne trouve pas la solution.
j’espère que j’ai été clair
merci d’avance
David