Swift inline conditionnelle?
Comment puis-je faire dans Swift ?
(someboolexpression ? "Return value 1" : "Return value 2")
(non, je n'ai pas lu tout le manuel et pourtant... je l'ai probablement manqué sur la page 2!)
OK, donc sa à la page 91 et ci-dessus semble être correcte. Cependant, je suis en train de l'utiliser dans une chaîne de caractères comme suit:
println(" some string \(some expression ? "Return value 1" : "Return value 2")"
mais le compilateur n'est pas heureux. Aucune idée si ce si possible?
C'est aussi proche que j'ai pu obtenir
let exists = "exists"
let doesnotexist= "does not exist"
println(" something \(fileExists ? exists : doesnotexist)")
- C'est probablement un oubli dans la grammaire, et vous pouvez remplir un rapport de bogue sur elle. Je n'ai pas vérifié la grammaire pour cela, mais il pourrait être intéressant de noter qu'il n'aime pas échappé littéraux, seules les variables. C'est à dire. vous ne pouvez pas faire cela: println("bonjour \("monde")"), mais vous pouvez le faire: laissez-monde = "monde"; println("bonjour \(monde)"), comme vous l'avez noté. Résumer, il semble vouloir une variable et non une expression.
- Je vais le faire, merci. En attendant je vais accepter @MikeS réponse comme la meilleure option pour le moment
- vous avez besoin d'un espace après
let doesnotexist
ou un préprocesseur erreur se produit et assurez-vous que vous avez déclarélet fileExists: Bool
certains où, avant laprintln
déclaration qui devrait en fait êtreprint
de Swift 2.0. Sinon, j'ai essayé votre code, il fonctionne très bien
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à la recherche pour un one-liner pour ce faire, vous pouvez tirer le
?:
fonctionnement de la chaîne d'interpolation et de les enchaîner avec+
à la place:Sorties:
Vous pouvez utiliser la nouvelle Néant-Coalescence de l'Opérateur, introduit dans Swift 3. Il sera de retour la valeur par défaut si
someOptional
estnil
Dans le cas où si
someOptional
est faux, cet opérateur attribuer""
àsomeValue
Si, dans ce cas, ça change de la secondBool quelle que soit la firstBool est. Vous pouvez faire cela avec des entiers et des chaînes de trop
Vous étiez oh si proche. Suffit de l'affecter à une variable:
Edit:
Vous pouvez le faire:
println("something \(automaticOptionOfCar ? "Automatic" : "Manual")")
?Il est appelé "opérateur ternaire".
En ce qui concerne @Esqarrouth réponse, je pense qu'un meilleur format serait:
Swift 3:
C'est la même chose que:
Bien,
Si vous concaténer le conditionnel avec la chaîne à l'aide de l'opérateur+, il devrait fonctionner.
Par conséquent, Mike est correct.
la solution la plus simple que j'ai utilisé dans mes projets
Swift 3+
J'ai utiliser inline conditionnelle comme ceci :
isFavorite fonction renvoie un Boolen
favoriteButton.tintColor = CoreDataManager.sharedInstance.isFavorite(placeId: place.id, type: 0) ? UIColor.white : UIColor.clear
tourOperatorsButton.isHidden = place.operators.count != 0 ? true : false