Передайте два аргумента в 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