Wie bekomme ich Zugriff auf die Klasse "self" Instanz zum Aufruf von Klassen-Instanz-Methoden mit dem folgenden Code. Wenn ich self.callSomeClassIntance(), wie gezeigt, versuche, bekomme ich einen "A C-Funktionszeiger kann nicht von einem Abschluss gebildet werden, der Kontext" Fehler vom Compiler erfasst. Ich versuche info.callSomeClassInstance(), aber dies wird einen "no member callSomeClassInstance" Fehler geben. Code wird Zeit korrekt ausgelöst, wenn die eine Codezeile xxxx.callSomeClassIntance() entfernt wird.Swift CFRunLoopTimerCreate - Wie bekomme ich "Selbst" in Timer-Rückruf
import Foundation
class Foo {
func callSomeClassIntance() {}
func start() {
let runLoop : CFRunLoopRef = CFRunLoopGetCurrent();
var context = CFRunLoopTimerContext(version: 0, info: unsafeBitCast(self, UnsafeMutablePointer<Void>.self), retain: nil, release: nil, copyDescription: nil)
let timer : CFRunLoopTimerRef = CFRunLoopTimerCreate(kCFAllocatorDefault, 0.1, 3.0, 0, 0, cfRunloopTimerCallback(), &context);
CFRunLoopAddTimer(runLoop, timer, kCFRunLoopCommonModes);
CFRunLoopRun()
}
func cfRunloopTimerCallback() -> CFRunLoopTimerCallBack {
return { (cfRunloopTimer, info) -> Void in
print("Fire timer...")
// need self context here to call class instance methods
self.callSomeClassIntance()
}
}
}
Siehe auch http://stackoverflow.com/questions/30786883/swift-2-unsafutablepointervoid-to-object. –
Ich denke, das ist ein anderes Problem. Er möchte in der Lage sein, das Selbst in die Callback-Funktion zu überführen. Was kann getan werden, indem man Foo passiert! an die Funktion cfRunloopTimerCallback und mithilfe des übergebenen Parameters callSomeClassInstance aufrufen. –
func cfRunloopTimerCallback (selfPtr: Foo) -> CFRunLoopTimerCallBack { return {(cfRunloopTimer, info) -> Void in print ("Fire Timer ...") // müssen hier selbst Kontextklasse Instanzmethoden nennen SelbstPtr.callSomeClassIntance() } } } –