[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
を書かず、素直にコメントアウトしよう、という気持ちになりました。
Author And Source
この問題について([Xcode/Swift5] returnの後の処理が意図せず実行される「Expression following 'return' is treated as an argument of the 'return'」に注意), 我々は、より多くの情報をここで見つけました https://qiita.com/ensan_hcl/items/c2771b70dc9806b22e8d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .