C'è qualche differenza in rapida tra dichiarazione di funzione:Differenza tra funzione e la chiusura assegnazione
func function(a: String) {
print(a);
}
function("test");
e la chiusura incarico?
C'è qualche differenza in rapida tra dichiarazione di funzione:Differenza tra funzione e la chiusura assegnazione
func function(a: String) {
print(a);
}
function("test");
e la chiusura incarico?
anonimo o
func function(a: String) {
print("\(a), name: \(__FUNCTION__)");
}
let closure = { (a: String) in
print("\(a), name: \(__FUNCTION__)");
}
Lista Capture
supportate solo le chiusure:
let obj = FooClass()
let closure = { [weak obj] in ... }
funzione curry
supportate solo funzioni:
func curriedFunc(x:Int)(y:Int) { ... }
let curried = curriedFunc(1)
curried(y:2)
simili, ma non è esatto lo stesso con l'utilizzo di chiusura:
let closure = { (x:Int) in { (y:Int) in ... }}
Generics
supportate solo funzioni:
func function<T>(x:T) { ... }
referenceability dalla propria dichiarazione iniziale
supportate solo in funzioni globali:
func recursive(var x:Int) -> Int {
...
return condition ? x : recursive(x)
}
si può fare questo con la chiusura anche:
var recursive:((Int) -> Int)!
recursive = { (var x) in
...
return condition ? x : recursive(x)
}
Ma questo non è raccomandato perché questo fa sì riferimento forte cicli.
sovraccarico
supportate solo funzioni:
func function(a: String) { print("String: \(a)") }
func function(a: Float) { print("Float: \(a)") }
N.B.È possibile fare riferimento come chiusura come questo:
let f:(Float) -> Void = function
"Ma questo non è raccomandato perché ciò causa forti cicli di riferimento." No, non lo è. – newacct
Un'altra differenza: ricorsività all'interno di un'altra funzione
funzioni nidificate non possono essere ricorsive:
func foo() {
func bar() { bar() } // does not compile
}
ma chiusure dentro altra le funzioni possono essere ricorsive:
func foo() {
var bar: (() ->())!
bar = { bar() }
}
Una differenza è che non è possibile definire la chiusura al curry ma è possibile definire la funzione al curry. Un'altra differenza è che non è possibile definire la chiusura ricorsiva, ma è possibile definire una funzione ricorsiva – mustafa