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づつずらす
}
}



