[Xcode / Swift5] Remarque "L'expression suivant" retour "est traitée comme un argument du" retour "", qui est exécutée involontairement après le retour.

L'environnement de développement est Xcode 12.1.

Pendant le débogage, quelque chose peut provoquer un «retour» au milieu du processus.

func hoge(){
    print("A")
    return
    print("B")
    print("C")
}

Naturellement, print (" A ") est exécuté. Donc, de façon choquante, print (" B ") est ** exécuté **.

Pourquoi? ?? ?? ?? ?? ??

Je suis tombé sur une situation similaire dans un code plus complexe et je me suis inquiété d'environ 20 minutes. Cependant, il y a en fait un avertissement. En raison du code imbriqué compliqué, l'avertissement n'a pas été affiché en texte intégral, et je ne l'ai pas lu en pensant: "Bien sûr, il est dit que le code après le retour ne sera jamais exécuté." , C'était une grosse affaire.

Expression following 'return' is treated as an argument of the 'return'

En d'autres termes, la partie suivante de «return» est interprétée comme la valeur de retour. En effet, print (" B ") renvoie Void. La valeur de retour de la fonction «hoge» est également «Void». L'interprétation est donc correcte. En d'autres termes, le code au début est interprété comme suit.

func hoge() -> Void {
    print("A")
    return print("B")
    print("C")
}

C'est pourquoi print (" B ") est appelé. Je n'ai pas écrit le code dans cet esprit ...

J'ai lu l'avertissement sans l'ignorer, et j'avais envie de commenter docilement sans écrire «return» dans des endroits étranges.

Recommended Posts

[Xcode / Swift5] Remarque "L'expression suivant" retour "est traitée comme un argument du" retour "", qui est exécutée involontairement après le retour.
Quel est le plus rapide, taille ou 0, comme argument de List # toArray?