2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

[Xcode/Swift5] returnの後の処理が意図せず実行される「Expression following 'return' is treated as an argument of the 'return'」に注意

開発環境はXcode 12.1です。

デバッグ中、何かの拍子に処理の途中にreturnさせることがあります。

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

当然print("A")が実行されます。
で、衝撃なんですが、print("B")実行されます

なぜ??????

もっと複雑なコードの中で同様の事態に遭遇し、20分ほど悩みました。
しかし実はwarningが出ています。複雑なネストの深いコードが影響してwarningが全文表示されず、私は「当然code after 'return' will never be executedと書いてあるのだろう」と考えて読みもしなかったのですが、これが大変な内容でした。

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

つまり、returnの次の部分が返り値と解釈されるよ、とのこと。
確かに、print("B")Voidを返します。関数hogeの返り値もVoidです。ですから解釈は通ります。つまり冒頭のコードはこう解釈されていることになります。

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

print("B")が呼ばれるわけです。そんなつもりでコードを書いたわけではないのですが……。

warningを無視せず読み、変なところにreturnを書かず、素直にコメントアウトしよう、という気持ちになりました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
2
Help us understand the problem. What are the problem?