swiftで一定時間ごとに、何らかの処理を行うメソッドscheduledTimer
swiftで一定時間ごとに、何らかの処理を行うためのメソッドで
scheduledTimer というのが用意されてます。
Timerクラスのメソッドです。
引数に値を入れてやると、その条件で動きます。
Timer.scheduledTimer( //TimerクラスのメソッドなのでTimerで宣言 timeInterval: 0.1, //処理を行う間隔の秒 target: self, //指定した処理を記述するクラスのインスタンス selector: #selector(self.sayHello(_:)), //実行されるメソッド名 userInfo: nil, //selectorで指定したメソッドに渡す情報 repeats: true //処理を繰り返すか否か ) @objc func sayHello(_ sender: Timer) { //(_ sender: Timer) Timerクラスのインスタンスを受け取る print("Hello World") }
例えばViewController.swiftに
class ViewController: UIViewController { @IBAction func tapButton(_ sender: UIButton) { Timer.scheduledTimer( timeInterval: 0.1, target: self, selector: #selector(self.sayHello(_:)), userInfo: nil, repeats: true ) } @objc func sayHello(_ sender: Timer) { print("Hello World") } }
こんな風に書くと、tapButtonを押すと、
0.1秒ごとにprint("Hello World")が実行されます。
うっとおしいですね。
ちなみに、ハンドラ
@objc func XXX(){
}
に値を渡したいなら
userInfo:を設定する
class ViewController: UIViewController { @IBAction func tapButton(_ sender: UIButton) { let mylabel = UILabel() mylabel.text = "hoge" mylabel.frame.origin = CGPoint(x: self.view.frame.width, y: 200) mylabel.sizeToFit() self.view.addSubview(mylabel) Timer.scheduledTimer( timeInterval: 0.1, target: self, selector: #selector(self.sayHoge(_:)), userInfo: mylabel, repeats: true ) } @objc func sayHoge(_ sender: Timer) { let hogelabel = sender.userInfo as! UILabel //sender.userInfoはmylabelのこと。 @IBAction func tapButtonのlet mylabel = UILabel() をひっぱてくる print("\(hogelabel.text as! String)") //mylabel.text = "hoge"のhogeを0.1秒ごとにprint hogelabel.frame.origin.x -= 20 //@IBAction func tapButton で発生したラベルを0.1秒ごとにx座標−20づつずらす } }