(j’ai un peu merdé dans la création initiale du sujet et je n’ai pas su l’éditer ou le supprimer complètement ?! Alors je le réitère ci-dessous).
Voilà un code apparemment simple, destiné à mettre à l’épreuve le déballage de l’optionnel inputKeyboard en cas de nil (généré par un EOF, ctrl + D dans xCode).
Mais pourquoi cela génère-t-il une boucle infinie, car le repeat-While tourne bien, mais le readLine() sembble être ignoré à partir du premier ctrl + D saisi, et alors que j’espérais justement pouvoir ressaisir d’autres caractères valides.
Merci pour toutes infos
var isInputOk: Bool = false
var compteur: Int = 0
repeat {
compteur += 1
if let inputKeyboard = readLine() {
print("Received any input OK")
isInputOk = true
} else {
print("Received EOF before any input was given")
isInputOk = false
}
print(compteur)
} while isInputOk == false
print("Sortie du while")
A priori le CTRL-D signifie que l’utilisateur souhaite quitter l’app. C’est probablement pour ça que la saisie ne se réactive pas par la suite.
Si tu veux vérifier la saisie, tu peux le faire dans le cas où le readLine() te retourne une valeur : ça vaut le coup de vérifier cette valeur.
Si par contre la personne à utilisé le raccourcis CTRL-D, ça veut dire qu’elle souhaite quitter ton app et tu dois donc quitter au lieu de boucler
Merci Maxime pour cette réponse. En fait l’app n’est pas quittée suite à CTRL-D, mais ça lance une boucle infinie avec le repeat-while sans re-solliciter une frappe clavier via readLine().
Comment produire par une absence de caractère avant le EOF?
Oui justement, tu reçois l’information que l’utilisateur souhaite quitter l’app, donc tu es censé sauvegarder les données puis quitter.
Tu ne dois surtout pas boucler si tu as reçu null comme réponse.
Si tu cherches à éviter les saisies vides il faut que tu compares le retour au texte "" pour dire si la saisie est invalide. Si le retour est nil alors tu dois quitter ton app (dans ton cas, tu dois sortir de la boucle et ne pas traiter la réponse)