web-dev-qa-db-fra.com

Swift inline 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 raté à la page 2!)

OK, sa page 91 et celle ci-dessus semblent correctes. Cependant, j'essaye d'utiliser ceci dans une chaîne comme ceci:

println(" some string \(some expression ? "Return value 1" : "Return value 2")"

mais le compilateur n'est pas content. Une idée si cela est possible?

C'est aussi proche que j'ai pu obtenir

let exists = "exists"
let doesnotexist= "does not exist"

println("  something \(fileExists ? exists : doesnotexist)")
71

Si vous cherchez un one-liner pour le faire, vous pouvez tirer le ?: opération en dehors de l'interpolation de chaîne et concaténation avec + au lieu:

let fileExists = false // for example
println("something " + (fileExists ? "exists" : "does not exist"))

Les sorties:

quelque chose n'existe pas

114
Mike S

Vous pouvez utiliser le nouvel opérateur néo-coalescent , introduit dans Swift. Il retournera la valeur par défaut si someOptional est nil

let someValue = someOptional ?? ""

Dans le cas où someOptional est faux, cet opérateur attribue "" à someValue

23
Vitaliy Gozhenko
var firstBool = true
var secondBool: Bool

firstBool == true ? (secondBool = true) : (secondBool = false)

Si dans ce cas, le secondBool est remplacé par le premier. Vous pouvez le faire aussi avec des entiers et des chaînes

17
Esqarrouth

Cela s'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 pareil que:

var firstBool = true
var secondBool: Bool

if (firstBool == true) {
    secondBool = true
} else {
    secondBool = false
}
7
Ray Tso

Tu étais si proche. Juste besoin de l'affecter à une variable:

self.automaticOption = (automaticOptionOfCar ? "Automatic" : "Manual")

Modifier:

Aucune 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)")
6
Steve Rosenberg

Bien,

Si vous concaténez la condition 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")
5
Tanmay Bakshi

solution simple j'ai utilisé dans mes projets

Swift 3 +

var retunString = (state == "OFF") ? "securityOn" : "securityOff"
4
Sathya Baman

J'ai utiliser inline conditionnel comme ceci:

la fonction isFavorite retourne 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

0
Sergio Trejo