web-dev-qa-db-fra.com

Comment utilisez-vous la variable optionnelle dans un opérateur conditionnel ternaire?

Je souhaite utiliser une variable optionnelle avec l'opérateur conditionnel ternaire, mais l'erreur est générée. Cette erreur: optional ne peut pas être utilisée comme booléen. Qu'est-ce que je fais mal?

var str1: String?
var myBool:Bool
myBool = str1 ? true : false
50
Yashwanth Reddy

Vous ne pouvez pas assigner une valeur de chaîne à bool mais vous pouvez le vérifier

myBool = str1 != nil ? true : false
print(myBool)

Il imprimera false car str1 est vide.

75
Dharmesh

Nil Coalescing Operator peut également être utilisé . Le code ci-dessous utilise l'opérateur conditionnel ternaire et le décompression forcée (a!) Pour accéder à la valeur incluse dans a lorsque a n'est pas nul et pour renvoyer b

Opérateur ternaire normal:

output = a != nil ? a! : bApple Developer Link : Veuillez vous référer à Demo Link

Dans Swift 1.2 & 2, la ligne de code ci-dessus est remplacée par un format plus court:

output = a ?? b

Lien de démonstration : L'opérateur de coalescence nil (a ?? b) décompresse un a facultatif s'il contient une valeur ou renvoie une valeur par défaut b si a est nul. 

62
Abhijeet

Cela fonctionne même bien si la valeur souhaitée est une propriété ou le résultat d'un appel de fonction sur une option (dans Swift 3.0):

return peripheral?.connected ?? false
3
Robert Atkins

Opérateurs ternaires opèrent sur trois cibles. Comme C, Swift n'a qu'un seul opérateur ternaire, l'opérateur conditionnel ternaire (a? b: c).

Exemple d'utilisation sur tableView -

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
     return section == 2 ?  4 :  1
}

indique que si section est égale à 2, il renvoie 4 sinon 1 sur false.

3
Jack

Dans le cas où la comparaison est basée sur une condition

 let sliderValue = Float(self.preferenceData.getLocationRadius().characters.count > 1 ?self.preferenceData.getLocationRadius():"0.1")

Ici, la fonction getLocationRadius () renvoie une chaîne. Encore une chose si on ne met pas un espace entre 1 et? il en résulte une erreur de syntaxe

0
Muhammad Nayab