Расширение на превосходном ответе @ MartinR.
Swift должен быть в состоянии сделать вывод, что cb
имеет тип (Int, Int)->()
, или вы можете явно задать тип:
let cb: (Int, Int)->() = { a, b in print("success") }
Тогда вы могли бы заметить, что a
и b
не используются и заменить их _
:
let cb: (Int, Int)->() = { _ in print("success") }
Почему мы можем уйти с помощью одного _
, когда функция принимает 2 параметра? В этом случае Swift знает, что есть 2 параметра, поэтому _
заменяет кортеж, содержащий все параметры. Он заменяет (_, _)
.
Вы можете использовать _
с @ MartinR отвечают:
let cb = { (_:Int, _:Int) in print("success") }
или вы можете написать это нравится:
let cb = { (_:(Int, Int)) in print("success") }
, который может быть прочитан как:
cb
принимает два параметра типа Int
, который он игнорирует и печатает «успех»
Большое объяснение спасибо. :) –
Спасибо Мартину. JBM –
Также вы получаете эту ошибку, когда функция обратного вызова должна возвращать значение, но вы еще не набрали «возвращаемое значение» в закрытие ... –