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