Comment est-ce que je fais ceci dans Swift?
(someboolexpression ? "Return value 1" : "Return value 2")
(non, je n’ai pas encore lu tout le manuel … je l’ai probablement manqué à la page 2!)
OK donc sa à la page 91 et ce qui précède semble être correct. Cependant, j’essaye de l’utiliser dans une chaîne comme ceci:
println(" some ssortingng \(some expression ? "Return value 1" : "Return value 2")"
mais le compilateur n’est pas content. Une idée si cela est possible?
Ceci est aussi proche que j’ai pu obtenir
let exists = "exists" let doesnotexist= "does not exist" println(" something \(fileExists ? exists : doesnotexist)")
Si vous cherchez un one-liner pour le faire, vous pouvez extraire l’opération ?:
l’interpolation de chaîne et concaténer avec +
place:
let fileExists = false // for example println("something " + (fileExists ? "exists" : "does not exist"))
Les sorties:
quelque chose n’existe pas
Vous pouvez utiliser le nouvel opérateur Nales-Coalescing , introduit dans Swift 3 . Il retournera la valeur par défaut si someOptional
est nil
let someValue = someOptional ?? ""
Si someOptional
est faux, cet opérateur assigne ""
à someValue
var firstBool = true var secondBool: Bool firstBool == true ? (secondBool = true) : (secondBool = false)
Si dans ce cas, le secondBool est remplacé par le premierBool. Vous pouvez le faire avec des entiers et des chaînes
Tu étais si proche. Juste besoin de l’assigner à une variable:
self.automaticOption = (automaticOptionOfCar ? "Automatic" : "Manual")
Une idée pourquoi cette même expression ne peut pas être incorporée dans une chaîne?
Vous pouvez le faire:
let a = true let b = 1 let c = 2 println("\(a ? 1: 2)")
Bien,
Si vous concaténez le conditionnel avec la chaîne en utilisant l’opérateur +, cela devrait fonctionner.
Par conséquent, Mike a raison.
var str = "Something = " + (1 == 1 ? "Yes" : "No")
C’est ce qu’on appelle un ” opérateur ternaire “.
En ce qui concerne la réponse de @ Esqarrouth, je pense qu’un meilleur format serait:
Swift 3:
var firstBool = true var secondBool: Bool secondBool = firstBool ? true : false
C’est la même chose que:
var firstBool = true var secondBool: Bool if (firstBool == true) { secondBool = true } else { secondBool = false }
solution simple que j’ai utilisée dans mes projets
Swift 3+
var retunSsortingng = (state == "OFF") ? "securityOn" : "securityOff"
J’ai utiliser inline conditionnel comme ceci:
La fonction isFavorite renvoie un booléen
favoriteButton.tintColor = CoreDataManager.sharedInstance.isFavorite(placeId: place.id, type: 0) ? UIColor.white : UIColor.clear
tourOperatorsButton.isHidden = place.operators.count != 0 ? true : false