Swiftで作った関数がうまく動かず困っています。
lang
1 2func helloFactory() -> (Int, String) -> () { 3 func sayHello(count:Int, words:String){ 4 for _ in 0...count{ 5 print(words) 6 } 7 } 8 return sayHello 9} 10let english = helloFactory 11english(10, "Hello World")
englishの第一引数のところでエラーが出てしまっていますエラーの内容は下記のようなものです。
lang
1helloWorld.swift:10:11: error: argument passed to call that takes no arguments 2english(10, "Hello World") 3 ~~~^~~~~~~~~~~~~~~~~
試しに引数を無くして同じようなコードを書いてみたところ問題なくコンパイルができ正常に実行できました。調べて見たところエラーは定数を変更しようとした際に発生するらしかったのですが、10という数字は定数ではないですしよくわかりませんでした。
また、引数を無くし、関数にデフォルト引数を設定してみたりもしたのですが、動きませんでした。
引数を無くして動いたコードを貼っておきます
lang
1func helloFactory() -> () -> () { 2 func sayHello(){ 3 print("hogeeee") 4 } 5 return sayHello 6} 7let english = helloFactory() 8english()
「エラーは定数を変更しようとした際に発生する」というのは argument passed... のことですか?でしたら全く違いますよ。
エラーでググったところ https://teratail.com/questions/44306 ここに行き着きまして定数なのかなと思っていたんですがこのエラーって定数の値を変更しよう死した際に発生するエラーというわけではないんでしょうか
その回答にも書いてありますが、エラー自体は「引数の無いものに対して引数を渡している」という意味です。その回答の場合、let value(定数)だからSampleのイニシャライザには引数が無いのに、Sample(value: num) と引数を渡しているので、このエラーが発生します。もっと簡単なエラーの再現コードを回答に追記しておきます。
なるほど!丁寧にありがとうございます。もやもやが晴れました
回答1件
あなたの回答
tips
プレビュー