我有一个包含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”行。
答案 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)
我已修改您的代码如下。
我创建了 NSTimer !变量将通过方法 scheduledTimerWithTimeInterval 在 someFunc ()中分配。
然后我将选择器设置为字符串类型( Swift 中的推荐语法)
在此之后,我发送了 userInfo ,将使用 val()
中的 timer.userInfo 检索我希望这可以帮助您解决问题。
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