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