2015-12-04 15 views
5

Nehmen Sie diese Grundfunktion:Swift Scope-Funktion - Referenzierung selbst (im Sinne von „Selbst als die einhüllende Funktion“)

func sampleFunction() 
{ 
    print(self) 
} 

Hier self bezieht sich auf die Klasseninstanz es, die Umschläge, anstatt - wie Macht wohl sinnvoller - die Funktion, die es umhüllt.

Wie bekommt man einen Verweis auf die umhüllende Funktion anstatt seine umhüllende Klasseninstanz?

Idealer, ich suche so etwas zu tun:

func sampleFunction (value: Int) 
{ 
    print(selfAsEnvelopingSampleFunction, value) 
} 
+0

interessante Frage! Ich wusste nicht einmal, dass ich das selbst wissen wollte, aber hier ist, was ich gefunden habe http://stackoverflow.com/questions/24048430/logging-method-signature-using-swift –

+0

Ich glaube, dass es bereits durch seinen Namen verfügbar ist. .. zum Beispiel 'print (sampleFunction, value)' '' sampleFunction (2) 'gibt' '(Function) 2' – Alladinian

Antwort

4

Wenn Sie den Namen der Funktion ausdrucken möchten, Sie __FUNCTION__

print(__FUNCTION__) 

in Ihrer Print-Anweisung verwenden können, sonst nur sampleFunction verwenden als ein Argument.

+0

Fügen Sie der Dokumentation in Ihrer Antwort einen Link als Referenz hinzu, um sie zu vervollständigen. [Hier ist der Link] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html#//apple_ref/doc/uid/TP40014097-CH32-ID390) –

+0

@ TomaszBąk danke für den Vorschlag –

1

Instanzmethoden curried sind in schnell. So können Sie die Funktion als Referenz erhalten.

struct User { 
    func sampleFunc(name: String) { 
     let f = User.sampleFunc(self) 
     print(f, name) 
    } 
} 

Hier ist der f-Wert ist die Funktion selbst

+0

aus Dank @mustafa, das habe ich schon bemerkt, und hätte das in die ursprüngliche Frage stellen sollen. Ich war eigentlich auf der Suche nach einem generischen, wiederverwendbaren Satz wie "Selbst", den ich nicht jedes Mal neu eingeben müsste. –

Verwandte Themen