J'essaye de faire tous mes champs de text requirejs pour m'assurer que les users ne le laisse pas vide. J'ai essayé mais pour une raison quelconque, ça ne marche pas. J'ai l'printing que ma logique est correcte, mais c'est un problème avec la logique de swift
Voici mon code:
let title = txtTitle.text! let location = txtWhere.text! let when = txtWhen.text! if title != nil && location != nil && when != nil { var titleArray = [Ssortingng]() var whereArray = [Ssortingng]() var whenArray = [Ssortingng]() let titleObject = UserDefaults.standard.object(forKey: "saveTitle") let whereObject = UserDefaults.standard.object(forKey: "saveLocation") let whenObject = UserDefaults.standard.object(forKey: "saveWhen") if let tempTitle = titleObject as? [Ssortingng] { titleArray = tempTitle titleArray.append(txtTitle.text!) print(titleArray) } else { titleArray = [txtTitle.text!] } if let tempWhere = whereObject as? [Ssortingng] { whereArray = tempWhere whereArray.append(txtWhere.text!) //print(titleArray) } else { whereArray = [txtWhere.text!] } if let tempWhen = whenObject as? [Ssortingng] { whenArray = tempWhen whenArray.append(txtWhen.text!) //print(titleArray) } else { whenArray = [txtWhen.text!] } UserDefaults.standard.set(titleArray, forKey: "saveTitle") UserDefaults.standard.set(whereArray, forKey: "saveLocation") UserDefaults.standard.set(whenArray, forKey: "saveWhen") txtTitle.text = "" txtWhere.text = "" txtWhen.text = "" txtTime.text = "" } else { errMsg.isHidden = false errMsg.text = "All fields are required" } }
Pour vérifier de manière fiable si les propriétés de text des champs de text ne sont pas nil
et non vides, utilisez
if let title = txtTitle.text, !title.isEmpty, let location = txtWhere.text, !location.isEmpty, let when = txtWhen.text, !when.isEmpty { ...
Si toutes les conditions sont passées, les trois variables sont dépliées en toute security.
une. Vous ne devriez pas forcer le txtTitle.text!
( txtTitle.text!
): À la place, vérifiez la valeur optionnelle
b. Vous voudrez peut-être vérifier les strings vides au lieu de simplement pour nil
Cela dit, vous pouvez tester la validité comme ça:
let title = txtTitle.text if title?.isEmpty == false { ...// title was filled }
Ou mieux (merci Leo Dabus):
if let title = txtTitle.text, !title.isEmpty { ...// title was filled }