Übergeben Sie zwei Argumente an NSTimer in Swift
Ich habe eine Funktion, die strings enthält der text in einer TextView. Ich würde das gerne ändern, das verblassen von text über die Zeit. Es ist nicht die Umsetzung, wie verblassen ich bin in Zweifel, sondern, wie Sie übergeben zwei Argumente (der alpha-Wert und der Bereich der Zeichen, soll eingeblendet werden) an die Wähler, die NSTimer.
Ich habe mir bei diese Frage, aber das bedeutet nicht, geben Sie mir eine Antwort.
Dies ist, was ich jetzt haben:
func someFunc(){
var timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("val:"), userInfo: 5, "someString", repeats: true)
}
func val(val1: Int, val2: String){
println("printing \(val1) and \(val2)")
}
Aber es gibt mir ein "Zusätzliches argument" Selektor "in call" Fehler. Ich muss in der Lage sein, um übergeben Sie zwei Argumente, aber ich kann nicht einen einzigen korrekt; entfernen val2 von der Funktion und entfernen "classextender", so dass ich nur ein argument, die Ergebnisse in die Funktion drucken Sie die Zeile "drucken 140611230609088" bei jedem Zeitschritt.
InformationsquelleAutor Benjamin Hviid | 2014-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen ein array mit Ihre Objekte und senden Sie es userInfo. Versuchen Sie dies:
Hoffe, das hilft.. 🙂
println(timer.userInfo?.name)
imval
Funktion. Dies schreibt null, wenn die Funktion ausgeführt wird.drucken Sie timer.userInfo
Siehe mein edit
Drucken
timer.userInfo
gibt mir diese in der it-Konsole:Optional(<_TtCSs23_ContiguousArrayStorage00007FD413454E20 0x7fd413645890>( one, two ) )
Wie würde ich dann den Zugriff auf die einzelnen Werte? Ich kann nicht mittimer.userInfo[1]
zum Beispiel, es gibt mir eine out-of-bounds-Fehler, so nehme ich an, dass es nicht mich direkt auf die array-index. Die Zuordnungarr
zutimer.userInfo
erzeugt eine Warnung (kein Fehler), dass der abgeleitete Typ vonarr
Typ " AnyObject, die möglicherweise unerwartete.Warum nimmst du nicht den timer.userInfo in einem array??? wie arr = timer.userInfo. Dann versuchen, auf Sie zuzugreifen, die durch den index???
InformationsquelleAutor Rashad
Zunächst, Sie habe zu viele Argumente. Zweitens, die func erhält einen NSTimer, so haben Sie entweder zu verwenden oder AnyObject NSTimer.
Also meine suggetion wäre ein Wörterbuch oder ein array und übergeben Sie, als userInfo argument etwa so:
Nicht Stimmen, aber die timer-Funktion sollte sich
NSTimer
argumentfunc val(timer: NSTimer)
.Du hast Recht. AnyObject funktioniert, aber es ist sauberer zu verwenden NSTimer, Stimme ich zu.
Warum
timer.fire()
?wenn Sie ein Wörterbuch, die Sie verwenden würden
val?.userInfo?.objectForKey("key1")
oderval?.userInfo?["key1"]
InformationsquelleAutor DanielR
Ich geändert haben, dass code wie der folgende.
Habe ich eine NSTimer! auf variable zugewiesen werden, in someFunc() durch die Methode scheduledTimerWithTimeInterval.
dann habe ich selector als String-Typ (empfohlen syntax in Swift)
Danach habe ich geschickt haben userInfo, die abgerufen werden mithilfe timer.userInfo in val()
Ich hoffe, dies wird Ihnen helfen, Ihr problem zu lösen.
Hinweis: Sie können senden Sie alles in der userInfo. Aber natürlich müssen Sie zum abrufen der userInfo unter Verwendung timer.userInfo
"Userinfo"
gleich in meine beiden Variablen, so dass ich Sie abrufen kann inval()
?Erstellen Sie ein array mit diesen beiden Werten und übergeben Sie dieses array mit userInfo scheduledTimerWithTimeInterval. Sie können dann abrufen, array mit timer.userInfo
InformationsquelleAutor R_Developer