【Swift4】argument passed to call that takes no arguments の解決策


今日、Swiftでじゃんけんアプリを作っていた時に、この「argument passed to call that takes no arguments」というエラーが出たのでエラーが出た状況と解決策をまとめていこうと思う。



argument passed to call that takes no arguments





◇ 目次 ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇

 1. 実現しようとした事
 2. Argument Passed to call that takes no argumentsとはどんなエラー? 
 3. 解決策
    4. まとめ

 1. 実現しようとした事



[図] myJankenViewControllerで発生したエラーの詳細




 import UIKit

  class myJankenViewController: UIViewController {

     var selectedNumber: Int(arc4random(2)) 
                           ! Argument passed to call that takes no arguments

    (以下省略)
 }


「グー」「チョキ」「パー」の3種類の出目をCPUが出してくれる、そんなじゃんけんアプリを作っていたのだが、

相手のCPUの出目をarc4random関数で指定してあげようと思ったところ、このようなエラーが出てしまった。

 2.  Argument Passed to call that takes no arguments とはどんなエラー? 


日本語訳してみると、「呼び出すために渡される引数は引数を取りません」というのが妥当だろうか。技術用語マシマシの英文翻訳は本当に難しい・・・orz


つまり、自分自身の解釈だとclass直下に書く変数(今回はselectedNumber)は、viewDidLoad()や@IBAction func関数などで、呼び出される事がほとんどだと思う。

そんな変数を定義する時なおかつarc4randomを使うのであれば、右辺に渡す値に引数が含むものを入れてはいけないという事だと思われる。

ここで一番最初に掲載した図をよく見てみると、

[図] myJankenViewControllerで発生したエラーの詳細
確かに、赤線が(3)のところにだけ引かれているのが分かる。

arc4random(数字)関数は、()内で引数を取っているので、Xcode的にはその書き方は控えてね、という事だと思われる。

  3. 解決策

試行錯誤の上、これでうまくいった...!


 import UIKit

  class myJankenViewController: UIViewController {

     var selectedNumber: Int(arc4random_uniform(3))

 }



特定の乱数を指定した処理<if分岐など...>を使いたい時は、arc4randomではなく、arc4random_uniformを使ってくださいとのことだ。

 4. まとめ

乱数を生成する関数には色々な種類があり、それを正しく使い分けられるようにならないといけないみたいだ。

それらの違いについてまとめた記事をまたいつか投稿できたらいいなと思う。

余談だが、arc4random_uniformを使用した際に、

[図] arc4random_uniformで発生するエラー
Missing arguments for parameter #1 in call

というエラーが発生する事がある。

その時は、arc4random_uniform()の引数が抜けているため発生するエラーなので、数字を入れてやれば良い。

 import UIKit

  class myJankenViewController: UIViewController {

     var selectedNumber: Int(arc4random_uniform())
      //uniform(数字)←ここの数字が抜けていると、そのエラーが発生する。

 }

コメント

このブログの人気の投稿

【Unity】シーンギズモがデフォルトで表示されない時

【Swift4】iOSシミュレータでカメラとフォトライブラリが起動しない?試してみてわかったこと