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

Je veux utiliser une variable optionnelle avec l’opérateur conditionnel ternaire mais elle génère une erreur cette erreur: facultatif ne peut pas être utilisé comme booléen. Qu’est-ce que je fais mal?

var str1: Ssortingng? var myBool:Bool myBool = str1 ? true : false 

Vous ne pouvez pas atsortingbuer une valeur de chaîne à bool mais vous pouvez vérifier que str1 est nul ou pas comme ça:

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

Il affichera false car str1 est vide.

Nil Coalescing Operator peut également être utilisé. Le code ci-dessous utilise l’opérateur conditionnel ternaire et le dépliage forcé (a!) Pour accéder à la valeur enveloppée dans a quand a n’est pas nul et pour retourner b sinon

Opérateur Ternaire Normal:

output = a != nil ? a! : b output = a != nil ? a! : b Lien développeur Apple : veuillez vous reporter au lien Démo

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 nul (a ?? b) déballe un a optionnel s’il contient une valeur ou renvoie une valeur par défaut b si a est nil.

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

 return peripheral?.connected ?? false 

Les 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 si la section est égale à 2 puis retourne 4 sinon 1 sur false.

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