web-dev-qa-db-fra.com

Réduire le nombre de supports dans Swift

Est-ce que quelqu'un sait s'il y a un moyen d'utiliser une sorte de sténographie dans Swift? plus spécifiquement, en laissant de côté les accolades dans des choses comme les déclarations SI ... par exemple

if num == 0
  // Do something

au lieu de 

if num == 0
{
  // Do something
}

Ces accolades prennent plutôt de la place lorsque vous avez quelques FI imbriqués.

PS. Je sais que je peux faire ce qui suit:

if num == 0 {
  // Do something }

Mais je suis toujours curieux de savoir si ce genre de chose est possible

17
Byron Coetsee

Vous pouvez le faire :

let x = 10, y = 20;
let max = (x < y) ? y : x ; // So max = 20

Et tant de choses intéressantes:

let max = (x < y) ? "y is greater than x" : "x is greater than y" // max = "y is greater than x"
let max = (x < y) ? true : false // max = true
let max = (x > y) ? func() : anotherFunc() // max = anotherFunc()
(x < y) ? func() : anotherFunc() // code is running func()

Cette pile suivante: http://codereview.stackexchange.com peut être meilleure pour votre question;)

Edit: soyez prudent avec l'opérateur ternaire 

En ne faisant que remplacer l'opérateur ternaire par une instruction if else, le temps de construction a été réduit de 92,9%.

https://medium.com/@RobertGummesson/regarding-Swift-build-time-optimizations-fc92cdd91e31#.42uncapwc

61
StrawHara

Dans Swift, vous devez ajouter des accolades même s'il n'y a qu'une déclaration dans if:

if num == 0 {
  // Do something
}

Vous ne pouvez pas laisser les accolades, c'est comment Swift si la déclaration fonctionne.

4
Greg

Swift 2.0 update Méthode 1:

a != nil ? a! : b

Méthode 2: Sténographie si

b = a ?? ""

Référence: Apple Docs: opérateur conditionnel ternaire

et ça marche,

u.dob = (userInfo["dob"] as? String) != nil ? (userInfo["dob"] as! String):""

Je remplace une chaîne JSON par une chaîne vide si elle est nulle.

Edit: Ajout de la suggestion de Gerardo Medina 

u.dob = userInfo["dob"] as? String ?? ""
3
Prachil Tambe

Vous pouvez utiliser un raccourci si déclaration comme vous le feriez dans objective-c:

num1 < num2 ? DO SOMETHING IF TRUE : DO SOMETHING IF FALSE
3
Jack Chorley

Vous pouvez toujours mettre toute la if sur une seule ligne:

if num == 0 { temp = 0 }
0
fuzzygoat

c'est très simple: dans Swift 4

    playButton.currentTitle == "Play" ? startPlay() : stopPlay()

Le code d'origine est

    if playButton.currentTitle == "Play"{
     StartPlay()
    }else{
     StopPlay()
    }
0
user9060380