Swift en ligne conditionnel?

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") 

Modifier:

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