Ampliamento dell'eccellente risposta di @ MartinR.
Swift ha bisogno di essere in grado di dedurre che cb
è di tipo (Int, Int)->()
, o si potrebbe impostare in modo esplicito il tipo:
let cb: (Int, Int)->() = { a, b in print("success") }
Poi si potrebbe notare che a
e b
sono inutilizzati e sostituirli con _
:
let cb: (Int, Int)->() = { _ in print("success") }
Perché è possibile scappare con un singolo _
quando la funzione richiede 2 parametri? In questo caso, Swift sa che ci sono 2 parametri, quindi lo _
prende il posto della tupla che contiene tutti i parametri. Sostituisce (_, _)
.
È possibile utilizzare _
con @ di MartinR risposta:
let cb = { (_:Int, _:Int) in print("success") }
o si può scrivere come:
let cb = { (_:(Int, Int)) in print("success") }
che può essere letto come:
cb
prende due parametri di tipo Int
che ignora e stampa "successo"
Grande spiegazione, grazie. :) –
Grazie Martin. JBM –
Inoltre, si ottiene questo errore quando la funzione di callback deve restituire un valore, ma non si è ancora digitato 'return value' nella chiusura ancora ... –