J'ai un projet de calculatrice GPA Je suis sur le point de perfectionner. Je dois empêcher l'utilisateur d'entrer un numéro non flottant malgré que ".123456789" soit le seul caractère autorisé. Par exemple, si un utilisateur entre 2.3. pour une raison quelconque, mon programme se bloque puisque cette "entrée" n'est pas un flottant. J'ai inclus la base de mon code ci-dessous.Eviter un crash à partir d'une période double pendant un CharacterSet restreint
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
var allowed = CharacterSet.decimalDigits
let period = CharacterSet.init(charactersIn: ".")
allowed.formUnion(period)
//UNCOMMENT when isSuperset is working
//let characterSet = CharacterSet(charactersIn: string)
//return allowed.isSuperset(of: characterSet)
// Swift 3 appropriate solution
let isSuperset = string.rangeOfCharacter(from: allowed.inverted) == nil
return isSuperset
}
@IBAction func Calculate(_ sender: AnyObject) {
// if not filled in
if Credits1TF.text == "" || Grade1TF.text == "" || CumCredits.text == "" || CumGPA.text == "" || Credits1TF.text == "." || Grade1TF.text == "." || CumCredits.text == "." || CumGPA.text == "."
{
print...
} else
{
//credits
let credit1 = Float(Credits1TF.text!)!
//grades
let grade1 = Float(Grade1TF.text!)!
//math
let firstgrade = credit1 * grade1
Comment pourrais-je aller sur l'ajout de l'acceptation d'un seul point décimal dans un champ de texte le plus pratique en ce qui concerne la fonction textfield? Ou y a-t-il un moyen plus simple/direct?
Mise à jour 1:
let credit1 = Float(Credits1TF.text!)!
if credit1 != nil
{
let newcredits1 = credit1
//grades
let grade1 = Float(Grade1TF.text!)!
if grade1 != nil
{ let newgrade1 = grade1
À moins que je vais sur ce mal, je reçois l'avertissement que « comparaison de la valeur non-option de type « float » à zéro retourne toujours vrai ». J'avais l'impression que si credits1 ou grade1! = Nil, ma valeur numérique est correcte et ne causera pas de crash plus tard.
Si vous voulez éviter les plantages, arrêtez d'utiliser '!'. – rmaddy
Serait-il préférable d'utiliser un? –
Non, il serait préférable d'utiliser la liaison optionnelle au lieu du déballage forcé. – rmaddy