のは、それを打破してみましょう:
public func split(maxSplit: Int = default, allowEmptySlices: Bool = default, @noescape isSeparator: (Self.Generator.Element) throws -> Bool) rethrows -> [Self.SubSequence]
maxSplit
:最初のパラメータ、maxSplit
、あなたは順序がに分割されます作品の最大数を指定することができます。デフォルトはInt.max
です。
allowEmptySlices
:2番目のパラメータallowEmptySlices
は、シーケンス内の2つの連続する区切り文字が空のスライスにつながるかどうかを指定します。デフォルトはfalse
です。たとえば、文字列が"A..B"
で、.
文字で分割した場合、このパラメータに渡す内容に応じて出力配列に2つ(["A", "B"]
)または3つ(["A", "", "B"]
)の項目が表示されます。
isSeparator
:最後のパラメータは、シーケンスを分割する場所を特定するために渡すクロージャです。
maxSplit
とallowEmptySlices
の両方にデフォルトの引数があるので、それらを変更しない限り、関数呼び出しに含める必要はありません。あなたが提供しなければならない唯一のパラメータは、isSeparator
クロージャです。
someString.characters.split { $0 == "."}
を...と同等である:あなたのケースでは
、あなたはと呼ばれる
someString.characters.split(isSeparator: { $0 == "." })
:あなたはまた、このようなあなたの関数呼び出しを書くことができ
someString.characters.split(maxSplit: Int.max, allowEmptySlices: false) { $0 == ".' }
あなたがそれを書いた方法は、 "終わりの閉鎖"の構文を利用します。関数はクロージャを取る場合、それは最後の引数だとして、次のように括弧外閉鎖を移動することができます。
someString.characters.split() { $0 == "." }
と機能が一つだけの引数を取る場合(あなたが任意のデフォルト引数を数えません)供給していない、あなたは完全に括弧を省略することができます:最高レベルで
someString.characters.split { $0 == "." }
を、何が起こるかは、文字のシーケンスを通じてsplit
反復処理することです。指定されたクロージャを使用して各文字をテストし、クロージャがtrue
を返した場合、その文字のシーケンスを分割します。あなたのケースでは、それは"."
を見つけるたびに文字のシーケンスを分割します。
他のいくつかの注意事項:
rethrows
:全体の機能がrethrows
をマークされています。エラーをスローしますが、引数isSeparator
のために渡したクロージャがエラーをスローした場合に限ります。 isSeparator
パラメータを使用すると、エラーをスローするクロージャを渡すことができますが、そうする必要はありません。関数がエラーをスローするクロージャを受け入れるたびに、スローされないクロージャも受け入れられます。これは、非投げ込み関数が投げ関数のサブタイプであるためです。
@noescape
:isSeparator
のパラメータには@noescape
と表示されます。これは単に、split
への呼び出しの最後を過ぎてもクロージャの中に何も残らないことを意味します。