であるのに対し、名前は
divmod(_:_:)
であり、さまざまな使用例をいくつかのニュアンスがありますが、一般的にアンダースコアが「これを無視」を意味します。
新しい関数を宣言するとき、アンダースコアが呼び出されたときのパラメータは何のラベルを持つべきではないということスウィフトを伝えます - それはあなたが見ているケースです。より完全な関数宣言は、次のようになります。
func myFunc(label name: Int) // call it like myFunc(label: 3)
"label"は関数の呼び出し時に存在する必要があります。 (Swift 3以降は、デフォルトですべての引数にラベルが必要です。) "name"は、関数内で使用するその引数の変数名です。短い形式は、次のようになります。
func myFunc(name: Int) // call it like myFunc(name: 3)
これは外部の引数のラベルや内部パラメータ名の両方に同じ言葉を使用することができますショートカットです。これはfunc myFunc(name name: Int)
に相当します。
パラメーターラベルなしで関数を呼び出し可能にする場合は、アンダースコア_
を使用して、ラベルを何も/無視しないでください。 (この場合、パラメータを使用できるようにするには、内部名を指定する必要があります。代入文で)
func myFunc(_ name: Int) // call it like myFunc(3)
、アンダースコアは "何にも割り当てないでください" という意味です。結果を返すが、返された値を気にしない関数を呼び出す場合は、これを使用できます。
_ = someFunction()
記事では、あなたが、返されたタプルの一つの要素を無視するためにリンクされ好きか、:あなたは、いくつかの定義された関数型を実装閉鎖を書くとき
let (x, _) = someFunctionThatReturnsXandY()
、することができますアンダースコアを使用して特定のパラメータを無視します。プロトコルを採用しているか、スーパークラスのメソッドをオーバーライドする関数を宣言するとき
PHPhotoLibrary.performChanges({ /* some changes */ },
completionHandler: { success, _ in // don't care about error
if success { print("yay") }
})
同様に、あなたはパラメータを無視するパラメータに名を_
を使用することができます。プロトコル/スーパークラスはパラメータにラベルがないことを定義することもできるので、1行に2つのアンダースコアを指定することもできます。
class MyView: NSView {
override func mouseDown(with _: NSEvent) {
// don't care about event, do same thing for every mouse down
}
override func draw(_ _: NSRect) {
// don't care about dirty rect, always redraw the whole view
}
}
最後の2つのスタイルにやや関連:定数、ローカル変数を/バインドするフロー制御構文を使用した場合、あなたはそれを無視する_
を使用することができます。あなたはそのメンバーへのアクセスを必要とせずにシーケンスを反復処理したい場合たとえば、:あなたはswitch文でのタプルの例を結合している場合
for _ in 1...20 { // or 0..<20
// do something 20 times
}
、アンダースコアは、こののように、ワイルドカードとして動作することができます例:The Swift Programming Languageで短縮されたもの:
switch somePoint { // somePoint is an (Int, Int) tuple
case (0, 0):
print("(0, 0) is at the origin")
case (_, 0):
print("(\(somePoint.0), 0) is on the x-axis")
case (0, _):
print("(0, \(somePoint.1)) is on the y-axis")
default:
print("(\(somePoint.0), \(somePoint.1)) isn't on an axis")
}
大きな説明、ありがとうございました! –
あなたは単に非常に良いユースケースを忘れてしまったと思います。場合によっては配列や辞書のオブジェクトの**番号**にしか興味がなく、実際の値には興味がない*場合もあります。だからあなたは 'forArray {do stuff}'のようなことをします。通常、値を気にするときは、 'someArrayのオブジェクトのために{do stuff}' – Honey
良い提案です。私はそれを加えました。 – rickster