Передайте два аргумента в NSTimer в Swift
У меня есть функция, которая содержит строки текста в TextView. Я хотел бы изменить затухание этого текста с течением времени. Это не реализация того, как я теряю сомнение, а скорее как передать два аргумента (альфа-значение и диапазон символов, которые должны исчезнуть) в Селектор в NSTimer.
Я рассмотрел этот вопрос, но это не дает мне ответа.
Вот что я имею прямо сейчас:
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", поэтому я передаю только один аргумент, приводит к тому, что функция печатает строку "печать 140611230609088" на каждом временном шаге.
Ответы
Ответ 1
Сделайте массив с вашими объектами и отправьте его в 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
}
Надеюсь, это поможет..:)
Ответ 2
Прежде всего, у вас слишком много аргументов. Во-вторых, 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)")
}
Ответ 3
Я изменил ваш код следующим образом.
-
Я создал NSTimer! переменная, которая будет назначаться в someFunc() с помощью метода scheduleTimerWithTimeInterval.
-
то я установил селектор как тип String (рекомендуемый синтаксис в Swift)
-
После этого я отправил userInfo, который будет извлечен с помощью timer.userInfo в val()
Я надеюсь, что это поможет вам решить вашу проблему.
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. Но, конечно, вам нужно получить userInfo, используя timer.userInfo