2016-08-24 2 views
0

ich diese Methode hier haben:Swift Pass Parameter in einem Selektor

func displayPDF(dataParam: NSData, PDFFileParam: String) 

Jetzt versuche ich, diese Methode über NSTtimer wie so zu nennen:

NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: #selector(FileBrowser.displayPDF(_:PDFFileParam:)), userInfo: nil, repeats: false) 

Ich habe diese beiden Variablen:

let PDFFile = self.data[indexPath.row]["Name"]!!.componentsSeparatedByString("\\").last     
var data: NSData! 

Ich möchte diese Variablen verwenden, um die Methode mit der selector, wie zu übergeben tue ich das?

Antwort

1

Dafür benötigen Sie benutzerdefinierte subclass von NSTimer oder andere Art und Weise zu erstellen ist, dass userInfo, Eigentum von NSTimer wie auf diese Weise nutzen können.

Zuerst ändern Sie Ihre scheduledTimerWithTimeInterval wie folgt.

let dic:[String:AnyObject] = ["pdfName" : PDFFile, "pdfData" : data] 
NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: #selector(FileBrowser.displayPDF(_:)), userInfo: dic as! AnyObject, repeats: false) 

Jetzt ist Ihre Timer-Funktion displayPDF wie dies ändern.

func displayPDF(timer:NSTimer) { 
    if let userInfo = timer.userInfo as? [String: AnyObject] { 
     print(userInfo["pdfName"]) 
    } 
} 
+0

Danke, aber ich erhalte eine Fehlermeldung für diese Linie 'NSTimer.scheduledTimerWithTimeInterval (0,4, Ziel: Selbst, Selektor: #selector (FileBrowser.displayPDF (_ :)), userinfo: [ "PDFName": pdffile, "pdfData": Daten], Wiederholungen: false) ' – user979331

+0

' Kontext-Typ 'AnyObject' kann nicht mit Dictionary-Literal verwendet werden ' – user979331

+0

Ich habe diesen Fehler erhalten' Kontext-Typ 'AnyObject' kann nicht mit Dictionary-Literal 'für den userInfo-Wert verwendet werden – user979331