Lorsque vous comparez des strings dans Swift, vous pouvez comparer des strings non optionnelles avec des strings optionnelles.
Comme si (le text est facultatif et vide):
UITextField.text == "" // True
Est-ce parce que l'opérateur d'égalité déballe Ssortingngs par lui-même?
Pour chaque type Equatable
l'opération ==
est également définie pour les options:
public func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool
Le non-optionnel sur le côté droit est automatiquement promu en option.
La valeur ==
pour les optionnels renvoie true
lorsque les deux valeurs sont nil
ou si elles sont toutes deux non nulles et égales.
Votre théorie ne tient pas dans l'exemple suivant:
let x: Ssortingng? = nil if x == "" { print("True") } else { print("False") //Printed }
Ce qui se passe ici, c'est que la propriété text
n'est jamais nil
à l'initialisation – c'est plutôt une string vide, comme indiqué par la documentation :
Cette string est @ "" par défaut.
Le compilateur Swift ne dévoile pas implicitement les options, mais laisse cette responsabilité au programmeur.