web-dev-qa-db-ja.com

Swift)でNSTimerに2つの引数を渡します

TextViewにテキストの文字列を含む関数があります。そのテキストのフェードを時間の経過とともに変更したいと思います。これは、私が疑問に思っているフェードの実装ではなく、NSTimerのセレクターに2つの引数(アルファ値とフェードする文字の範囲)を渡す方法です。

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

}

ただし、「呼び出し中の余分な引数 'セレクター'」エラーが発生します。 2つの引数を渡すことができる必要がありますが、1つの引数を正しく渡すこともできません。関数からval2を削除し、「someString」を削除すると、引数を1つだけ渡すため、関数はすべてのタイムステップで「printing140611230609088」という行を出力します。

12
Benjamin Hviid

オブジェクトを使用して配列を作成し、それを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

}

お役に立てれば.. :)

30
Rashad

まず第一に、あなたはあまりにも多くの議論を持っています。次に、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)")
}
5
DanielR

コードを次のように変更しました。

  1. NSTimerを作成しました! someFunc()でメソッドscheduledTimerWithTimeIntervalによって割り当てられる変数。

  2. 次に、selectorを文字列タイプとして設定しました(Swiftの推奨構文)

  3. この後、私はserInfoを送信しました。これは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を取得する必要があります。

0
R_Developer