6 votes

Que signifie une "instruction do" sans bloc catch?

En lisant Programming iOS 12, je suis tombé sur plusieurs exemples de code avec des déclarations do, sans blocs catch, comme ci-dessous :

    do {
        let mars = UIImage(named:"Mars")!
        let sz = mars.size

        let r = UIGraphicsImageRenderer(size:CGSize(sz.width*2, sz.height), format:mars.imageRendererFormat)
        self.iv1.image = r.image { _ in
            mars.draw(at:CGPoint(0,0))
            mars.draw(at:CGPoint(sz.width,0))
        }
    }

    // ======

    do {
        let mars = UIImage(named:"Mars")!
        let sz = mars.size

        let r = UIGraphicsImageRenderer(size:CGSize(sz.width*2, sz.height*2), format:mars.imageRendererFormat)
        self.iv2.image = r.image { _ in
            mars.draw(in:CGRect(0,0,sz.width*2,sz.height*2))
            mars.draw(in:CGRect(sz.width/2.0, sz.height/2.0, sz.width, sz.height), blendMode: .multiply, alpha: 1.0)
        }
    }

J'apprécierais grandement si quelqu'un pouvait expliquer quel est le but des déclarations do sans blocs catch.

7voto

Carpsen90 Points 6849

C'est un nouvel horizon de code : ainsi vous pouvez utiliser plusieurs instructions do si vous souhaitez réutiliser un nom de variable. Comme dans l'extrait de code de votre question, les variables mars, sz et r existent dans les deux horizons sans erreur.

Une déclaration do peut être étiquetée, ce qui vous permet de sortir de cet horizon :

scopeLabel: do {
    for i in 0..<10 {
        for j in 0..<20 {
            if i == 2, j == 15 {
                break scopeLabel
            }
            else {
                print(i,j)
            }
        }
    }
}

Pour plus de détails, jetez un œil ici.

3voto

Sh_Khan Points 45592

Étant donné qu'ici il n'y a rien qui provoquerait une erreur, alors en utilisant le code do so l'écrivain peut copier-coller le même contenu sans changer les noms de variable car la portée de la variable est le bloc do

Je ne supporte pas cette façon qu'il pourrait créer une fonction pour éviter de répéter le code afin qu'il ait sa propre portée

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X