1. ホーム
  2. objective-c

[解決済み] Swiftのリファレンスで_のアンダースコアは何を表しているのですか?

2022-05-09 12:22:51

質問

Appleのドキュメントのリファレンスセクションには、この種の事例がたくさんあります。

<ブロッククオート

func runAction(_ action : SKAction!)

Objective-Cの「同等品」は。

- (void)runAction:(SKAction *) action

Swiftのリファレンスでは)アンダースコアの後にスペースがあり、"action"がイタリック体で書かれていることが重要なのだろうと思います。

しかし、これが何を伝えようとしているのかがわからない。そこで質問なのですが、リファレンスで使われている規約のリファレンスはあるのでしょうか?

--アンダースコアの使用について、今回参考にしたページはこちらです。 https://developer.apple.com/documentation/spritekit/sknode#//apple_ref/occ/instm/SKNode/runAction

更新情報

Swift 3 は、関数/メソッドのパラメータ名と引数ラベルがどのように使用され、命名されるかにいくつかの変更を加えました。これは、この質問とその答えに影響を及ぼします。Ricksterは、この問題の多くをクリアする関数の_アンダースコアについての別の質問に答えるための素晴らしい仕事をしています、ここで。 なぜswiftにアンダースコアが必要なのですか?

どのように解決するのですか?

どちらの回答も正しいのですが、もう少しはっきりさせたいと思います。

_ が使われているのは メソッドの外部パラメータ名の動作を変更する .

メソッドのローカルパラメータ名と外部パラメータ名 のセクションに書かれています。

Swiftは、最初のパラメータ名を メソッド はデフォルトでローカルパラメータ名となり、2 番目以降のパラメータ名には ローカルと外部両方のパラメータ名 をデフォルトで使用します。

一方、関数はデフォルトで外部パラメーター名を持ちません。

例えば、次のようなものがあります。 foo() クラスで定義されたメソッド Bar :

class Bar{
    func foo(s1: String, s2: String) -> String {
        return s1 + s2;
    }
}

を呼び出すと foo() のように呼び出されます。 bar.foo("Hello", s2: "World") .

しかし を使用すると、この動作を上書きすることができます。 _ の前にある s2 と宣言されているところです。

func foo(s1: String, _ s2: String) -> String{
    return s1 + s2;
}

そして foo のように、単純に呼び出すことができます。 bar.foo("Hello", "World") のように、2つ目のパラメータを除いた名前になります。

あなたのケースに戻ります。 runAction という型に関連付けられているので、メソッドです。 SKNode 明らかに したがって _ パラメータの前に action を呼び出すことができます。 runAction を外部名なしで使用することができます。

Swift 2.0に対応したアップデート

関数とメソッドが動作するようになりました 同じように は、ローカルおよび外部引数名の宣言という点で

関数は、デフォルトで第2パラメータから外部パラメータ名を使用して呼び出されるようになりました。このルールは、純粋なSwiftコードにのみ適用されます。

そのため _ の前にある 機能 を使用すると、呼び出し側は外部パラメータ名を指定する必要がなくなります。 メソッド .