Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pass two arguments to NSTimer in Swift

I have a function that contains strings of text in a TextView. I would like to change the fading of that text over time. It is not the implementation of how fading I'm in doubt about, but rather how to pass two arguments (the alpha value and the range of characters that should be faded) to the Selector in the NSTimer.

I have looked at this question, but that does not provide me with an answer.

This is what I have right now:

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)")

}

However it gives me an "Extra argument 'selector' in call" error. I need to be able to pass two arguments, but I can't pass a single one correctly either; removing val2 from the function and removing "someString", so I only pass one argument, results in the function printing the line "printing 140611230609088" at every time step.

like image 340
Benjamin Hviid Avatar asked Aug 26 '14 08:08

Benjamin Hviid


2 Answers

Make a array with your objects and send it to userInfo. Try this:

func someFunc(){
    var arr = ["one", "two"] 
    var timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("val:"), userInfo: arr, repeats: true)

}


func val(timer: NSTimer){

    //You'll get an array in timer.userInfo
    // arr = timer.userInfo.
    // Now you'll get you data in each index of arr

}

Hope this helps.. :)

like image 126
Rashad Avatar answered Nov 16 '22 02:11

Rashad


First of all, you've got too many arguments. Secondly, the func receives an NSTimer so you either have to use AnyObject or NSTimer.

So my suggetion would be to use a dictionary or an array and pass that as the userInfo argument like so:

func someFunc(){

    var timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("val:"), userInfo: ["key1" : 1 , "key2" : "aString"], repeats: true)     
}


func val(val : NSTimer?) {
    println("printing \(val?.userInfo)")
}
like image 26
DanielR Avatar answered Nov 16 '22 03:11

DanielR