在Swift中将两个参数传递给NSTimer

时间:2014-08-26 08:20:02

标签: ios swift arguments nstimer

我有一个包含TextView文本字符串的函数。我希望随着时间的推移改变该文本的淡化。这不是我对如何褪色的实现,而是如何将两个参数(alpha值和应该褪色的字符范围)传递给NSTimer中的Selector。

我查看过this个问题,但这并没有给我一个答案。

这就是我现在所拥有的:

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

}

然而它给我一个“额外参数'选择器'在调用中”错误。我需要能够传递两个参数,但我也无法正确传递一个参数;从函数中删除val2并删除“someString”,所以我只传递一个参数,导致函数在每个时间步打印“print 140611230609088”行。

3 个答案:

答案 0 :(得分:30)

使用您的对象创建一个数组并将其发送到userInfo。试试这个:

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

}

希望这会有所帮助.. :)

答案 1 :(得分:5)

首先,你有太多的论点。其次,func接收NSTimer,因此您必须使用AnyObject或NSTimer。

所以我的建议是使用字典或数组并将其作为userInfo参数传递,如下所示:

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

答案 2 :(得分:0)

我已修改您的代码如下。

  1. 我创建了 NSTimer !变量将通过方法 scheduledTimerWithTimeInterval someFunc ()中分配。

  2. 然后我将选择器设置为字符串类型( Swift 中的推荐语法)

  3. 在此之后,我发送了 userInfo ,将使用 val()

    中的 timer.userInfo 检索
  4. 我希望这可以帮助您解决问题。

    var timer :NSTimer!
    
    func someFunc(){
           timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "val", userInfo:"Userinfo", repeats: true)
    }
    
    func val(){
           println("printing \(timer?.userInfo) ")
    }
    

    注意:您可以在userInfo中发送任何内容。但是,当然您必须使用 timer.userInfo

    检索userInfo