web-dev-qa-db-ja.com

Swiftにオプションの完了ブロックがある関数

関数を作成するとき、次のようにデフォルト値を指定することにより、パラメーターをオプションにすることができます。

func foo(bar: String = "foobar") {}

完了ブロックでも同じことを行います(オプションにします)。私は次を試しました:

func foo(completionBlock: (foo: String) -> () = () -> ())
func foo(completionBlock: (foo: String) -> () = (foo: String) -> ())
func foo(completionBlock: (foo: String) -> () = ((foo: String) -> ()))
func foo(completionBlock: (foo: String) -> () = ((foo: String) in))
func foo(completionBlock: (foo: String) -> () = {(foo: String) in})

これどうやってするの?

編集:
これは重複した質問です。しかし、元の質問には解決策が見つかりませんでした。ネイサンの答えは最高です

31
ntoonio

In Swift 3:

func foo(completionBlock: (String) -> () = { _ in }) {}
35
nathangitter

デフォルトでnilにしたい場合:

func foo(completionBlock: ((String) -> ())? = nil) {

}

デフォルトの完了ブロックが非常に単純な場合、クロージャーを使用できます。

// A default completion block that is simple enough to fit on one line
func foo(completionBlock: (String) -> () = { result in print(result) }) {
    // ...
}

// A default completion block that does nothing
func foo(completionBlock: (String) -> () = {} ) {
    // ...
}

デフォルトの完了ブロックが1行より長い場合は、独自の関数として分割することをお勧めします。

func defaultCompletion(result: String) {
    // ...
}

func foo(completionBlock: ((String) -> ()) = defaultCompletion) {

}
34
Code Different