2016-04-08 11 views
2

Ich wurde gefragt, ob Objective-C-Blöcke den Schließungen oder Rückrufen ähnlicher sind. Allerdings scheint die Definition eines Rückrufes fast identisch mit einem Verschluss, zumindest in diesem Beispiel entlehnt http://swiftspace.org/callback-function-in-swift/:Was ist der Unterschied zwischen Schließungen und Rückrufen in Swift?

func mainFunction(callback:() -> Void) { 

    // some code 
    callback() // call the callback function 
} 

Im Programming Language Guide (Swift 2.2) Rückrufe selten erwähnt werden, mit dieser bemerkenswerten Ausnahme, wo ein Rückruf klingt wie eine Verschlusstyp:

„Wenn der Typ einer Schließung ist bereits bekannt, wie der Rückruf für ein delegieren, können Sie die Art seiner Parameter, deren Rückgabetyp oder beide weglassen. "

Hilfe?

+1

Möglicherweise beantwortet (von hier): http://StackOverflow.com/Questions/2070275/Javascript-Closures-and-Callbacks – TylerH

Antwort

2

Sie sind zwei völlig verschiedene, obwohl kompatible Konzepte. Ein Callback ist ein Hook für eine anzuhängende Funktion, so dass die Funktion aufgerufen werden kann, wenn eine Aktion benötigt wird, um ein Ergebnis oder einen Effekt bereitzustellen. Eine Closure ist eine Funktion, die lokale Variablen erfasst, die in einem Bereich außerhalb des lokalen Bereichs verwendet werden sollen. Eine Schließung kann ein Rückruf sein, wie jede andere Funktion kann ein Rückruf sein, aber es ist nicht auf diese Verwendung beschränkt.

In Ihrem Zitat sprechen sie darüber, wie Sie eine Schließung für den Rückruf verwenden können. In diesem Fall kann der Compiler die Funktionssignatur (Typen von Parametern und Rückgabe) aus dem Kontext ableiten.

Beachten Sie, dass dies sehr wenig mit Objective-C-Blöcken zu tun hat. Swift und Objective-C sind zwei völlig verschiedene Sprachen und Blöcke und Schließungen sind zwei verschiedene Implementierungen ähnlicher Konzepte.

+0

Ich denke, ich habe eine harte Zeit, sie als zwei völlig unterschiedliche Konzepte zu sehen, wenn sie aussehen so ähnlich. Die Unterschiede sind also:
Ein Callback ist ein Hook für eine Funktion. Eine Schließung ist eine Funktion. (Tatsächlich habe ich gelesen, dass eine Funktion eine spezielle Art von Schließung ist, um das Problem nicht zu verwirren.)
Eine Schließung kann lokale Variablen erfassen.
Eine Schließung kann ein Rückruf sein, aber es kann auch andere Dinge tun ... – squarehippo10

+0

In Swift ist eine Funktion ein beliebiger Code, der aufgerufen werden kann, möglicherweise mit Parametern und möglicherweise mit einem Rückgabetyp. Es gibt vordefinierte freie Funktionen, die in einem Bereich existieren und eine Funktionssignatur haben, die einen Funktionsnamen enthält. Es gibt auch Schließfunktionen, die namenlos sind und deren Parameter und Rückgabetyp aus ihrem aufrufenden Kontext nehmen. Was davon kommt, das ist ein Implementierungsdetail und in den meisten Fällen wirklich egal. – ColGraff

Verwandte Themen