2017-12-29 42 views
-3

これは良いことではないことは分かっていますが、これがどのように機能するかは非常に不思議です。スウィフト関数内で名前のない複数のパラメータを参照する方法

は、私はこのような関数を作成し、それを呼び出すが、私は、参照されることを意図されていないパラメータ

func printMultipleOf_v2(_ : Int, _ : Int) { 
    //how to reference parameters? 
} 
printMultipleOf_v2(2, 4) 
+0

ええ、私はできると思います。その票が下がっているので、あなたの答えに基づいて実際には良いテクニックを強調すると思った。 –

+0

あなたが望むなら、彼の答えをちょうどupvote /受け入れてください。または、なぜそれが良い答えであるかを明確にする価値があると思うなら、彼の答えの下で肯定的なコメントを追加してください。あなたが何かを追加したいのであれば、[あなた自身の回答を投稿する](https://stackoverflow.com/help/self-answer)。 – Rob

+0

@RichHoffmanあなたのために私の答えを受け入れることができます。 – Xcoder

答えて

2

パラメータは「無視パラメータ」と呼ばれているが、参照する方法が表示されないことができます。なぜ無視されたパラメータが使用されるのかについては、this answerを参照してください。

https://medium.com/swift-programming/facets-of-swift-part-4-functions-3cce9d9bba4「無視されたパラメータは、メソッドをオーバーライドしたり、指定されたパラメータを使用したりしないときのように、使用しないパラメータの名前を思いつく必要がなくなります。指定されたパラメータを使用しないでください。 "

0

非常に興味深く挑戦的です!許可すべきではありませんスウィフト4構文(スウィフトプログラミング言語(スウィフト4))、見て しかし、:

識別子がidentifier_headがで、

identifier → identifier-headidentifier-charactersopt 
identifier → `identifier-headidentifier-charactersopt` 
identifier → implicit-parameter-name 
identifier-list → identifier identifier,identifier-list 
identifier-head → Upper- or lowercase letter A through Z 
identifier-head → _ 
identifier-head → U+00A8, U+00AA, U+00AD, U+00AF, U+00B2–U+00B5, or U+00B7–U+00BA 
identifier-head → U+00BC–U+00BE, U+00C0–U+00D6, U+00D8–U+00F6, or U+00F8–U+00FF 
identifier-head → U+0100–U+02FF, U+0370–U+167F, U+1681–U+180D, or U+180F–U+1DBF 
identifier-head → U+1E00–U+1FFF 

ので、ここで定義しておく必要があります

parameter → external-parameter-nameoptlocal-parameter-nametype-annotation 
parameter → external-parameter-nameoptlocal-parameter-nametype-annotation... 
external-parameter-name → identifier 
local-parameter-name → identifier 

この場合、パラメータを参照することはできません。_は外部名用ではなく内部名用です。

+0

はい、コンパイルできます。私はそのコードをプレイグラウンドに入れてコンパイルしました。しかし、xcoderの答えを見ると、なぜそれが今であるのか分かりません。 –

0

あなたはこれらのパラメータを使用する場合は、単に_の引数のラベルを指定したが、その後、実際のパラメータ名を指定します:あなたはまだxを参照してyことができますが(その結果、

func printMultiple(_ x: Int, _ y: Int) { 
    // now use x and y 
} 

をまたは何でも)呼び出しポイントにはラベルは必要ありません。

printMultiple(2, 4) 
0

答えはありません。そのようなパラメータを宣言することによって、コンパイラにそれらを無視するように明示しています。それらを参照する必要がある場合は、内部名を入力します。

func printMultipleOf_v2(_ lhs: Int, _ rhs: Int) { 
    //how to reference parameters? 
    print(lhs, rhs) 
} 

これは「しないでください」のケースです。

関連する問題