web-dev-qa-db-fra.com

Ligne unique if dans Swift

Comment convertirait-on ce qui suit en Swift d'Objective-C?

if (myVar) return;

Swift n'utilise pas de parenthèses autour du conditionnel, cependant le code suivant donne une erreur.

if myVar return 
35
BytesGuy

Dans Swift les accolades ne sont pas optionnelles comme elles l'étaient dans Objective-C (C). Les parenthèses par contre sont optionnelles. Exemples:

Swift valide:

if someCondition {
    // stuff
}

if (someCondition) {
    // stuff
}

Swift invalide:

if someCondition 
    // one liner

if (someCondition)
    // one liner

Cette décision de conception élimine toute une classe de bogues qui peuvent provenir d'une mauvaise utilisation d'une instruction if sans accolades comme dans le cas suivant, où il n'est pas toujours clair que la valeur de something sera modifiée conditionnellement, mais somethingElse changera à chaque fois.

Bool something = true
Bool somethingElse = true

if (anUnrelatedCondition) 
    something = false
    somethingElse = false

print something // outputs true
print somethingElse // outputs false
41
Mick MacCallum

Eh bien, comme les autres gars ont également expliqué que les accolades sont un must dans Swift. Mais pour plus de simplicité, on peut toujours faire quelque chose comme:

let a = -5

// if the condition is true then doThis() gets called else doThat() gets called
a >= 0 ? doThis(): doThat()

func doThis() {
    println("Do This")
}

func doThat() {
    println("Do That")
}
54
4aRk Kn1gh7

De nombreux développeurs considèrent une ligne if, une ligne while et une ligne for comme un mauvais style car ils sont moins lisibles et seraient à l'origine de nombreuses erreurs.

Swift a résolu l'énigme en interdisant les instructions de contrôle de flux sur une ligne; les accolades ne sont pas optionnelles ...

if someCondition {
     // stuff
}

Bien sûr, vous pouvez toujours faire

if someCondition { return }

Il existe également des raisons de mise en œuvre. Avoir les parenthèses autour de la condition comme facultatif rend l'analyse beaucoup plus difficile. L'application d'accolades simplifie à nouveau l'analyse.

13
Sulthan

Vous pouvez utiliser le nouvel opérateur Nil-Coalescing, puisque Swift 3 au cas où vous auriez juste besoin de définir la valeur par défaut en cas d'échec:

let someValue = someOptional ?? ""

Dans le cas où someOptional est false, cet opérateur affecte "" à someValue

var dataDesc = (value == 7) ? "equal to 7" : "not equal to 7"
12
Azhar

Voici une solution simple que j'ai utilisée dans mes projets.

Swift 4 +

isManageCardTnCSelected ?
      (checkbox.isSelected = true) : (checkbox.isSelected = false)

var selected: Bool = isManageCardTnCSelected ?
      checkbox.isSelected = true : checkbox.isSelected = false

Swift 3 +

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