[ios] Passare i parametri a un metodo chiamato da NSTimer in Swift



Answers

Il tuo selettore deve essere una stringa a meno che non si supponga che sia un ivar. Inoltre, la tua funzione animate ha la firma sbagliata. Le seguenti modifiche dovrebbero farti spostare di nuovo:

var circle = Circle()
var timer = NSTimer.scheduledTimerWithInterval(1.0, target: self, selector: "animate", userInfo: circle, repeats: true)

func animate(circle: Circle) -> () {
  //do stuff with circle
}

La funzione in realtà non ha bisogno di restituire la tupla vuota; può essere scritto senza il -> ()

Ho anche visto la stringa di selezione avvolta in un metodo "Selector ()": Selector("animate") . Funziona in entrambi i modi.

Ho lavorato con NSTimer e chiusure me stesso e ho scritto un articolo su di esso: Utilizzo di Swift's Closures With NSTimer

Question

Sto cercando di passare un argomento a un metodo che viene chiamato da NSTimer nel mio codice. Sta facendo un'eccezione. Questo è come lo sto facendo. Circle è la mia classe personalizzata.

    var circle = Circle()
    var timer = NSTimer.scheduledTimerWithInterval(1.0, target: self, selector: animate, userInfo: circle, repeats: true)

Di seguito è il metodo che viene chiamato

    func animate(circle: Circle) -> Void{
      //do stuff with circle
    }

Nota: il metodo è nella stessa classe che viene chiamato. Quindi credo di aver impostato correttamente il target.




Links