Ответ 1
В Swift 3:
func foo(completionBlock: (String) -> () = { _ in }) {}
Когда я создаю функцию, я могу сделать параметр необязательным, присвоив ему значение по умолчанию, например:
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})
Как я могу это сделать?
РЕДАКТИРОВАТЬ:
Это/был дублированный вопрос, извините за это. Однако я не мог найти решение в исходном вопросе. Так ответ натан лучший
В Swift 3:
func foo(completionBlock: (String) -> () = { _ in }) {}
Если вы хотите установить значение по умолчанию 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) -> () = {} ) {
// ...
}
Если ваш блок завершения по умолчанию более сложный, вы можете определить его как отдельную функцию:
func defaultCompletion(result: String) {
// ...
}
func foo(completionBlock: ((String) -> ()) = defaultCompletion) {
}